【发布时间】:2015-11-14 11:20:21
【问题描述】:
这看起来应该很容易,但我一直不知道该怎么做。使用data.table 我想将一列C 与另一列A 相加,并保留这两列。同时,我希望能够命名新列。我的尝试和期望的输出:
library(data.table)
dt <- data.table(A= c('a', 'b', 'b', 'c', 'c'), B=c('19', '20', '21', '22', '23'),
C=c(150,250,20,220,130))
# Desired Output - is there a way to do this in one step using data.table? #
new.data <- dt[, sum(C), by=A]
setnames(new.data,'V1', 'C.total')
new.data
A C.total
1: a 150
2: b 270
3: c 350
# Attempt 1: Problem is that columns B and C kept, extra rows kept #
new.data <- dt[, 'C.total' := sum(C), by=A]
new.data
A B C C.total
1: a 19 150 150
2: b 20 250 270
3: b 21 20 270
4: c 22 220 350
5: c 23 130 350
# Attempt 2: Problem is that new column not named #
new.data <- dt[, sum(C), by=A]
new.data
A V1
1: a 150
2: b 270
3: c 350
【问题讨论】:
-
你看过Getting started的小插曲了吗?
-
我确实首先查看了这些小插曲以获得答案(它们非常有帮助,也是了解 data.table 的好方法)。不过,我没有看到这个答案,但现在我知道要寻找什么,我看到类似的答案在“在每个组内,为什么组变量长度为 1?”和“未使用的参数”错误,它们都不是这个问题的解决方案。你有没有想过某个特定的部分?
-
除非我弄错了你想要做什么,否则第 1d 部分解释了如何命名列..
-
@Arun:作为 data.table 的 4 年用户,我已经阅读了小插图、文档、MDowle 的常见问题解答、三个不同的备忘单、几个幻灯片演示文稿、YouTube 教程,所有这些一百倍以上等等。这个语法是隐藏的!
df[, V2 = sum(C), by=A]给出了一个神秘的语法“错误:未使用的参数”,但添加list()或.()使其合法,这是非常不直观的。需要更突出地描述! -
@smci 我有一个更新的 data.table 备忘单,可让您按类别搜索任务,因此您可以按主题过滤表格,如“总结”,然后查看所有可能性,包括“运行按一组对数据进行汇总计算并命名新列。”表格的 HTML 版本在这里 infoworld.com/article/3575086/… 或者您可以在 infoworld.com/article/3586153/… 下载 HTML 文件(免费注册要求)
标签: r group-by data.table rename