【发布时间】:2013-06-28 18:04:48
【问题描述】:
我正在尝试编写一个函数,该函数将根据前两列中的值对数据框中的列求和。例如,我有一个矩阵 M,
Crs gr P_7 P_8
38 1 3 16
38 1 12 45
38 1 9 28
40 2 3 9
40 2 14 29
40 1 4 3
40 2 8 2
我想先根据 column1(crs) 对列求和,然后再根据 column2(gr) 求和。结果会是,
Crs gr P_7 P_8
38 1 24 89
40 2 25 40
40 1 4 3
目前我正在使用,
M <- M[, list(sum(P_7),sum(P_8)), by=list(Crs,gr)]
但问题在于我必须定义无法修复的列的名称。所以,我想知道如何在不定义列名的情况下做到这一点。 提前致谢!
【问题讨论】:
-
Andrie 的回答没有问题,但您已经提出了
data.table的问题,并且有一种比使用plyr更有效的方法(参见@eddi)。 -
@Arun 计算速度更快,是的,我同意。但效率也取决于您对框架的舒适程度。我发现我在编写
plyr解决方案方面效率更高,尽管我与data.table有过广泛的合作。 -
@Andrie,我在这里强调 eddi 的答案的唯一原因是 OP 已经展示了他的
data.table试图获得答案。但是,我是 plyr 的粉丝,对它或您的回答没有任何反对意见。只要不处理大量数据(我作为生物信息学家所做),就不需要牺牲 plyr 的简洁性(尽管我不得不说我个人觉得 data.table 语法非常简单) . -
“plyr 的简洁性”??在大多数情况下,plyr 表达式通常要复杂得多且难以理解,在这种情况下,它只短了 1 个字符(而且只是因为我明确提到了“by”)。在遇到 data.table 之前,我开始使用 plyr,但很快就被非常陡峭的学习曲线和不清晰的语法关闭了(就在那时,我在寻找替代方案时找到了 data.table)。
-
@eddi,人们对不同的包装(产品)有不同的看法。许多人(包括您)在使用
data.table的语法时遇到了问题(对包或 Matthew 没有冒犯)。我只是说这是主观的。最好尊重他人的差异,不要太挑剔。plyr受到很多很多(普通)R 用户的喜爱(data.table只能替换plyr的一个或部分功能)并且受欢迎的原因有很多。
标签: r data.table