【发布时间】:2016-01-22 10:28:33
【问题描述】:
我有以下data.table
library(data.table)
testdt <- data.table(var1=rep(c("a", "b"), e=3), p1=1:6, p2=11:16)
# var1 p1 p2
#1: a 1 11
#2: a 2 12
#3: a 3 13
#4: b 4 14
#5: b 5 15
#6: b 6 16
我需要每个p* 的每个var1 的中值,p* 应该在行中,var1 的不同唯一值在列中。
所以,我正在寻找这个输出:
variable a b
1 p1 2 5
2 p2 12 15
我找到的最简单的方法是:
dcast(melt(testdt, id.vars = "var1", measure.vars = c("p1", "p2")),
variable ~ var1,
value.var = "value",
fun.aggregate = median)
但我觉得我在这里遗漏了一些东西(比如最适合的功能),所以我很想知道一种直接的方法(独特的功能)来做同样的事情。
我知道 reshape2 包的recast 可以用recast(testdt, variable~var1, fun=median, id.var="var1") 解决问题,但我想避免加载另一个包。
编辑:
我正在寻找一种既简单又高效的解决方案。这将应用于具有约 300 列和约 80 行的约 40 个表的列表
【问题讨论】:
-
试试
testdt[,lapply(.SD, median) , var1],但这是你想要的转置。 -
感谢@akrun,已经尝试过了,但我需要“转置”部分
-
@AnandaMahto hi Ananda :-) 实际上,越快越好...(我会为 36 个 data.tables 这样做,在一个列表中,有 ~(100-300) 列 x(1到 10) 行)
-
也许我该做一些基准测试了...
标签: r data.table