【发布时间】:2017-11-22 21:17:55
【问题描述】:
我想使用data.table,但如果by 对应于缺失(NA),我想跳过j 部分的计算:
这是一个示例 data.table
library(data.table)
DT <- data.table(y=10, g=c(1,1,1,2,2,2,2,2,NA,NA))
看起来像这样
> DT
y g
1: 10 1
2: 10 1
3: 10 1
4: 10 2
5: 10 2
6: 10 2
7: 10 2
8: 10 2
9: 10 NA
10: 10 NA
现在我想在g 上执行by=,第 9 行和第 10 行将合并在一起,因为它们具有相同的值 NA。
> DT[,.N, by=g]
g N
1: 1 3
2: 2 5
3: NA 2
我想将NA 行保留在输出中,但希望跳过结果中的计算部分,即获取输出,其中g 为NA 时N 为空
> DT[,.N, by=g]
g N
1: 1 3
2: 2 5
3: NA NA
我以为我可以通过.GRP 访问g 的值,但这只会给出组索引而不是值。是否可以根据by 变量的缺失状态进行计算?
【问题讨论】:
-
分组变量的 值 可以在
j中访问 - 如果在j中使用,它的长度为 1(参见 @987654321 @. 所以像DT[ , if(!is.na(g)) .(n = .N) else NA_integer_, by = g]这样的东西会起作用。 -
!is.na(g)在i参数中过滤有什么问题?即DT[!is.na(g),.N, by=g] -
@ScottRitchie 我认为这会从结果中删除
NA行。我仍然想要它以供后续加入。 -
@scmi 可能有重复,但您的链接问题是不是。 OP 明确指出 我想在输出中保留 NA 行,而在您的链接问题中,应该完全跳过
NA组。
标签: r data.table