我正在为这样的表使用 data.table 包:
DT <- data.table(id=rep(1:100, each=50),
grp=rep(letters[1:4], each=1250),
time=rep(1:50,100),
outcome=rnorm(5000),
seconds=rep(1:500,10),
weights=rnorm(5000),
response=rep(1:200, each=25),
key=c("grp", "time"))
我想从该表中创建一个包含一些汇总统计信息的新(可能是 rbindlisted)数据表。我首先创建了两个中间表a和b,
a <- DT[, list(mean = weighted.mean(outcome, weights),
median=median(outcome),seconds), by=c("grp","time")]
b <- DT[, list(mean=weighted.mean(response, seconds),
median=median(response)), by=c("grp","time")]
然后我试图在所有组中将这些行绑定在一起,但仍然保留沿行的分组。这不起作用:
DTfinal <- data.table(DT$grp, DT$time,
outcomemean=a$mean, responsemean=b$mean,
outcomemedian=a$median, responsemedian=b$median)
我认为合并不起作用,因为 a 和 b 的长度不同。行绑定 a 和 b 还混合了 a 和 b 的不同均值和中位数,理想情况下,我想要一个 rbindlist,它对每列都有某种后缀,例如 c(".a",".b")。
更新:我得到一个错误(因为 a 和 b 有不同的维度)做
DTfinal <- rbindlist(setNames(list(a[, c("grp", "time", "mean", "median"),
with = FALSE],
b[, c("grp", "time", "mean", "median"),
with = FALSE]),
c("a", "b")),
idcol= "id")
dcast(DTfinal, grp + time ~id, value.var = c('mean', 'median'))
它返回的地方
Aggregate function missing, defaulting to 'length'