【问题标题】:data.table: group-by, sum, name new column, and slice columns in one stepdata.table:一步完成分组、求和、命名新列和切片列
【发布时间】: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


【解决方案1】:

使用list(或.):

> dt[, list(C.total = sum(C)), by=A]
   A C.total
1: a     150
2: b     270
3: c     350

【讨论】:

  • 文档在哪里描述了这一点?
猜你喜欢
  • 1970-01-01
  • 2021-04-18
  • 2022-11-29
  • 1970-01-01
  • 2022-01-18
  • 2013-08-19
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
相关资源
最近更新 更多