我有一个data.table,每天都有一行数据,覆盖了30年的时间段,包含了不同的变量列。使用data.table的原因是我正在使用的.csv文件非常大(大约120万行),因为有一个名为“key”的列特征化了若干组的30年数据。
下面是一个示例数据集:
Key Date Runoff
A 1980-01-01 2
A 1980-01-02 1
A 1981-01-01 0.1
A 1981-01-02 3
A 1982-01-01 2
A 1982-01-02 5
B 1980-01-01 1.5
B 1980-01-02 0.5
B 1981-01-01 0.3
B 1981-01-02 2
B 1982-01-01 1.5
B 1982-01-02 4
上面是两个“关键字”的样本,其中包含了三年一月份的一些数据,以展示我的意思。实际数据集中有数百个“关键字”,每个“关键字”有30年的数据。我想要做的是生成一个输出,显示每个关键字每个月的平均总数,如下所示:
Key January February March.... etc
A 4.36 ... ...
B 3.26 ... ...
即:关键字A 1月份的总体平均值 = (2 + 1) + (0.1 + 3) + (2 + 5) / 3当我对一个30年的数据集(即仅一个关键字)进行此分析时,我已成功地使用以下代码来实现此目标:
runoff_tot_average <- rowsum(DF$Runoff, format(DF$Date, '%m')) / 30
DF是一个包含30年数据的数据框。
那么,我能否请您提出如何修改上面的代码以处理包含许多“键”的更大数据集的建议,或提供完全新的解决方案!
编辑
下面的代码生成了上述数据示例:
Key <- c("A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B")
Date <- as.Date(c("1980-01-01", "1980-01-02", "1981-01-01", "1981-01-02", "1982-01-01", "1982-01-02", "1980-01-01", "1980-01-02", "1981-01-01", "1981-01-02", "1982-01-01", "1982-01-02"))
Runoff <- c(2, 1, 0.1, 3, 2, 5, 1.5, 0.5, 0.3, 2, 1.5, 4)
DT <- data.table(Key, Date, Runoff)
runoff_tot_average_A <- rowsum(DF$Runoff[DF$Key=="A"], format(DF$Date, '%m')) / sum(DF$Key=="A")
这行代码是否能够得到你想要的结果?如果不行,能否提供一个简短可重现的例子? - Vincent