我有以下数据
# am qsec vs am gear carb
# 1: 1 17.36000 0.5384615 1 4.384615 2.923077
# 2: 1 17.02000 1.0000000 1 4.000000 2.000000
# 3: 0 18.18316 0.3684211 0 3.210526 2.736842
# 4: 0 17.82000 0.0000000 0 3.000000 3.000000
我想制作
# variable 0 1
# 1: qsec 18.1831579 17.3600000
# 2: qsec 17.8200000 17.0200000
# 3: vs 0.3684211 0.5384615
# 4: vs 0.0000000 1.0000000
# 5: am 0.0000000 1.0000000
# <snip>
其中输入数据中的am
组用作输出数据中的列。
我可以通过多个步骤执行此操作(如下所示&#34;数据输出&#34;)但我希望能够以更data.table
的方式执行此操作。我怎么能够
使用data.table
重塑此数据,以产生预期的结果。
我的尝试和数据重现
library(data.table)
data = setDT(mtcars[7:11])
# data in
tdat = data[, lapply(.SD, function(y){
unlist(lapply(c(mean, median), function(f) f(y) ))
}),
by="am", .SDcols=seq_along(data)
]
# data out
m = melt(tdat, id.vars="am")
m[, r:=duplicated(interaction(am, variable))+0L]
dcast(m, variable + r ~ am, value.var = "value")[, r:=NULL][]
我问similar question但是使用Akrun的解决方案,在评论中给出,返回
dcast( melt(tdat, id.var=1), variable~am, value.var='value')
#Aggregate function missing, defaulting to 'length'
# variable 0 1
#1: qsec 2 2
#2: vs 2 2
#3: am 2 2
#4: gear 2 2
#5: carb 2 2