【发布时间】: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