【发布时间】:2013-04-08 14:39:44
【问题描述】:
如何更优雅地使用plyr、reshape2、aggregate 函数和/或data.table?
library(plyr)
set.seed(1)
x <- data.frame(Ind = paste0("Ind", 1:10), Treatment = c(rep("Treat",10),rep("Cont",10)),
value = rnorm(20,60,8))
tr <- subset(x, Treatment == "Treat")
tr <- rename(tr, c("value" = "Treat"))
ct <- subset(x, Treatment == "Cont")
ct <- rename(ct, c("value" = "Cont"))
merge(ct[-2], tr[-2], by = "Ind", all = T, sort = F)
# Do not run, data.frame:
Ind Cont Treat
1 Ind1 72.09425 54.98837
2 Ind2 63.11875 61.46915
3 Ind3 55.03008 53.31497
4 Ind4 42.28240 72.76225
5 Ind5 68.99945 62.63606
6 Ind6 59.64053 53.43625
7 Ind7 59.87048 63.89943
8 Ind8 67.55069 65.90660
9 Ind9 66.56977 64.60625
10 Ind10 64.75121 57.55689
【问题讨论】:
-
这也可能与
plyr有关吗?那和data.table是我用得最少的软件包,但对于这类问题似乎非常有用的全能工具。 -
我已经用 plyr 解决方案更新了我的答案,但对于这个特定问题,我不确定 plyr 是最好的“工具”。
-
感谢大家提供各种令人费解的解决方案。这正是我想要的 =) 现在我可以回顾这篇文章并找到一种最适合特定数据框重塑挑战的方法。我将@AnandaMahto 的答案勾选为“已接受”,因为它有最多的选择。但是,对于这种特殊情况,@DidzisElferts 使用
reshape2包的解决方案可能是我最喜欢的。 @Arun 的data.table解决方案也值得仔细研究。
标签: r aggregate data.table plyr reshape