【发布时间】:2016-07-31 06:48:47
【问题描述】:
我正在使用 R 中的一个巨大的数据表,其中包含由不同来源获取的多个位置的每月温度测量值。
数据集如下所示:
library(data.table)
# Generate random data:
loc <- 1:10
dates <- seq(as.Date("2000-01-01"), as.Date("2004-12-31"), by="month")
mods <- c("A","B", "C", "D", "E")
temp <- runif(length(loc)*length(dates)*length(mods), min=0, max=30)
df <- data.table(expand.grid(Location=loc,Date=dates,Model=mods),Temperature=temp)
所以基本上,对于位置 1,我有模型 A 从 2000 年 1 月到 2004 年 12 月进行的测量。然后,我有模型 B 进行的测量。依此类推,模型 C、D 和 E。然后,依此类推位置 2 到位置 10。
我需要做的是,而不是有五个不同的温度测量值(来自模型),而是取所有模型的平均温度。
因此,对于每个地点和每个日期,我将只进行一次温度测量而不是五次(这将是多模型平均值)。
我试过了:
df2 <- df[, Mean:=mean(Temperature), by=list(Model, Location, Date)]
这并没有像我预期的那样工作。我至少希望生成的数据表是原始表行数的 1/5,因为我将五个测量值汇总为一个。
我做错了什么?
【问题讨论】:
-
尝试使用
df2 <- df[, .(mean = mean(Temperature)), by=list(Model, Location, Date)] -
你应该阅读包介绍。第 #2 节是关于聚合的,并说明了 Kunal 的建议:rawgit.com/wiki/Rdatatable/data.table/vignettes/…
标签: r data.table aggregate mean