绕过data.table小插曲“data.table 简介”,第 2 节“聚合”中的示例就是这样
ans <- flights[, .(.N), by = .(origin)]
ans
# origin N
# <char> <int>
# 1: JFK 81483
# 2: LGA 84433
# 3: EWR 87400
Run Code Online (Sandbox Code Playgroud)
Relacing.N用length的如“年”给出了相同数量的每个组的列:
> flights[, .(length(year)), by = .(origin)]
origin V1
1: JFK 81483
2: LGA 84433
3: EWR 87400
Run Code Online (Sandbox Code Playgroud)
或者
> flights[, .(length(carrier)), by = .(origin)]
origin V1
1: JFK 81483
2: LGA 84433
3: EWR 87400
Run Code Online (Sandbox Code Playgroud)
这是预料之中的。但是,当我使用length(origin),即在 中用作分组变量的相同变量时by,会执行不同的计算:结果为 1:
> flights[, .(length(origin)), by = .(origin)]
origin V1
1: JFK 1
2: LGA 1
3: EWR 1
Run Code Online (Sandbox Code Playgroud)
有没有解释为什么会发生这种情况?
对于更复杂的示例,它可能会被忽略,因此始终使用内置函数似乎.N比尝试使用length函数计算计数更安全。
这是由于在by( 或keyby) 参数中使用的变量或您正在对结果进行分组的变量在j参数中访问它们时已经分组为标量(特定组)。
有两个相关的开放问题可能对读者有用