我需要总结一个巨大的CSV文件(nrow = 1102300)。这是来自各种气候模型的每日气候数据。
首先,我想总结一下所有具有“历史”名称的列。我的目标是按日期(以年份(即 1950 年、1951 年等)为单位过滤所有独特的“纬度”和“经度”的最大值。
所有帮助将不胜感激。
数据框是这样的:
df = read.csv(text = '"lat","lon","Date","pr_CMCC.ESM2_historical","pr_GFDL.ESM4_historical_ssp126","pr_BCC.CSM2.MR_historical_ssp126","pr_INM.CM4.8_historical_ssp126","pr_FGOALS.g3_historical_ssp126","pr_TaiESM1_historical_ssp126","pr_NorESM2.MM_historical_ssp126","pr_CanESM5_historical_ssp126","pr_KIOST.ESM_historical_ssp126","pr_NorESM2.LM_historical_ssp126","pr_INM.CM5.0_historical_ssp126"
46.29166646,-62.62500314,1/1/1950 12:00,1.7243347,6.10E-05,6.10E-05,2.5483093,1.7853699,6.10E-05,1.846405,6.10E-05,1.4954529,1.4496765,3.769043
46.29166646,-62.62500314,1/2/1950 12:00,6.10E-05,6.10E-05,6.10E-05,9.24704,6.10E-05,12.741333,6.10E-05,6.424103,0.56463623,6.10E-05,1.1139832
46.29166646,-62.62500314,1/3/1950 12:00,6.10E-05,6.10E-05,6.10E-05,6.10E-05,6.10E-05,1.052948,6.10E-05,1.1445007,6.10E-05,6.10E-05,6.10E-05
46.29166646,-62.62500314,1/4/1950 12:00,7.965271,6.10E-05,6.10E-05,6.5919495,1.9684753,6.10E-05,6.10E-05,1.4191589,6.10E-05,0.70196533,3.9368896',header = TRUE)
我希望我的最终输出数据框像这样排列:
lat | lon | Value
其中价值 = 每年的最大值。
也许是这样:
df |>
mutate(
Date = as.POSIXct(Date, format = "%m/%d/%Y %H:%M"),
Year = format(Date, format = "%Y")
) |>
summarize(
.by = c("lon", "lat", "Year"),
Value = max(rowSums(pick(matches("historical"))))
)
# lon lat Year Value
# 1 -62.625 46.29167 1950 30.09146
使用
.by=
需要dplyr_1.1.0
或更新版本;如果您有旧版本,请从 summarize(.by=c(..), stuff)
更改为 group_by(..) |> summarize(stuff) |> ungroup()
。