【问题标题】:r data.table: aggregating the grouping column inconsistencyr data.table:聚合分组列不一致
【发布时间】:2017-10-15 17:09:31
【问题描述】:

我正在使用 data.table 包来聚合一个列,该列也是一个分组列。但结果不是我所期望的。

my_data =  data.table(contnt=c("america", "asia", "asia","europe", "europe", "europe"), num= 1:6)

#my_data
#contnt  num
#america  1
#asia     2
#asia     3
#europe   4
#europe   5
#europe   6

my_data[, length(contnt),by=contnt]
#contnt  V1
#america  1
#asia     1
#europe   1

当我聚合一个列而不是分组列时,它的工作方式不同

my_data[, length(num),by=contnt]
#contnt  V1
#america  1
#asia     2
#europe   3

造成这种差异的原因是什么?

【问题讨论】:

  • 你可能想要my_data[, .N,by=contnt]
  • 谢谢迈克,这很好。但我对为什么会出现不一致很感兴趣。

标签: r data.table


【解决方案1】:

这是一个很好的例子,展示了 data.table 将分组变量与其他变量传递给函数的方式:

my_data[,print(contnt),by=contnt]
# [1] "america"
# [1] "asia"
# [1] "europe"

my_data[,print(num),by=contnt]
# [1] 1
# [1] 2 3
# [1] 4 5 6

基本上,分组变量作为每个组的长度为 1 的向量传递,而对于其他变量,每个组的整个向量都被传递。

【讨论】:

    【解决方案2】:

    请学习data.table FAQ

    在每个组内,为什么组变量长度为1?

    [...] x 是一个分组变量,(从 v1.6.1 开始)长度为 1(如果在 j 中检查或使用)。这是为了效率和方便。 [...]

    如果您需要当前组的大小,请使用.N 而不是在任何列上调用length()

    【讨论】:

    • @Ahrith 只是好奇,我的回答解决了你的问题吗?
    猜你喜欢
    • 2014-09-14
    • 2019-10-15
    • 1970-01-01
    • 2018-07-23
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    相关资源
    最近更新 更多