我需要总结一个巨大的CSV文件(nrow = 1102300).这是来自各种气候模型的每日气候数据.

首先,我想总结所有带有"历史"名称的列.我的目标是所有唯一的"lat"和"lon"的日期过滤的最大值(以年(即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

其中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

这假设你的lonlat是相对不变的,尽管即使这样,有时用浮点数分组可能会有问题(参见Why are these numbers not equal?https://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f).我建议,如果你的其余数据每年在lonlat上有任何差异,那么你可能应该做不同的事情来汇总你的数据.


使用.by=需要dplyr_1.1.0或更高版本;如果您使用的是旧版本,请从summarize(.by=c(..), stuff)更改为group_by(..) |> summarize(stuff) |> ungroup().

R相关问答推荐

在R中使用自定义函数时如何删除该函数的一部分?

如何根据条件计算时差(天)

gt()从gt为相同内容的单元格 colored颜色 不同?

使用gcuminc,如何使用逗号格式化风险表?

当我们有多个特殊字符时,使用gsub删除名称和代码'

在另存为PNG之前隐藏htmlwidget绘图元素

移除仪表板Quarto中顶盖和车身之间的白色区域

R—将各种CSV数字列转换为日期

提取一个列表中单个列的重复观察结果R

根据类别合并(汇总)某些行

方法::slotName如何处理非类、非字符的参数?

过滤名称以特定字符串开头的文件

R中有约束的优化问题:如何用复数和对数效益函数解决问题?

TreeNode打印 twig 并为其上色

如何筛选截止年份之前最后一个测量年度的所有观测值以及截止年份之后所有年份的所有观测值

通过R:文件名未正确写入[已解决]将.nc文件转换和导出为.tif文件

Broom.Mixed::Augment不适用于Sample::分析

策略表单连接两个非常大的箭头数据集,而不会 destruct 内存使用

从两个数据帧中,有没有办法计算R中一列的唯一值?

将每晚的平均值与每晚的值进行比较,统计是否有效?