我正在使用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的长度不同。 rowbinding a和b也混合了a和b的不同均值和中位数,理想情况下我想要一个rbindlist,每个列都有一些后缀,如c(&#34; .a&#34;,&#34;。 b&#34;。)
更新: 我得到一个错误(因为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'
答案 0 :(得分:2)
我们可以在将数据集放入"1 + 2"
"apple,pear"
rbindlist
list
假设两个数据集的列数不同,并且我们需要保留一个列名称向量
DTfinal <- rbindlist(list(a,b))
dim(DTfinal)
#[1] 400 4
dim(a)
#[1] 200 4
dim(b)
#[1] 200 4
如果我们需要转换为&#39; wide&#39;格式
nm1 <- intersect(names(a), names(b))
rbindlist(list(a[, nm1, with = FALSE], b[, nm1, with = FALSE]), idcol= "id")