【问题标题】:.N differs from length(variable) when variable is used in `by`当在 `by` 中使用变量时,.N 与长度(变量)不同
【发布时间】:2020-12-01 04:09:57
【问题描述】:

围绕data.table 小插图“data.table 简介”,第 2 节“聚合”中的示例就是这样

ans <- flights[, .(.N), by = .(origin)]
ans
#    origin     N
#    <char> <int>
# 1:    JFK 81483
# 2:    LGA 84433
# 3:    EWR 87400

.N 替换为length,例如"year" 为每组提供相同的行数:

> flights[, .(length(year)), by = .(origin)]
   origin    V1
1:    JFK 81483
2:    LGA 84433
3:    EWR 87400

> flights[, .(length(carrier)), by = .(origin)]
   origin    V1
1:    JFK 81483
2:    LGA 84433
3:    EWR 87400

这是意料之中的。但是,当我使用length(origin),即与by 中用作分组变量相同的变量时,会执行不同的计算:结果为1:

> flights[, .(length(origin)), by = .(origin)]
   origin V1
1:    JFK  1
2:    LGA  1
3:    EWR  1

有什么解释为什么会这样吗?

对于更复杂的示例,它可能会被忽略,因此始终使用内置的 .N 似乎比尝试使用 length 函数计算计数更安全。

【问题讨论】:

  • 似乎正在发生回收,例如:data.table(group = "test", value = 1:10).
  • 至于 why,我认为这是一个相关问题:Columns appearing in the function in by= disappers in j(以及其中的链接)。
  • @Numerari 请接受提供答案或提供反馈,为什么您认为它不能回答您的问题

标签: r data.table


【解决方案1】:

这是由于by(或keyby)参数中使用的变量,或者您正在对结果进行分组,在j 中访问它们时已经分组为标量(特定组)论据。

有两个相关的未决问题可能对读者有用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多