gpt4 book ai didi

r - 跳过 data.table 中的 NA

转载 作者:行者123 更新时间:2023-12-04 10:32:27 25 4
gpt4 key购买 nike

我想用 data.table但想跳过 j 的计算部分如果 by对应缺失( NA ):

这是一个示例 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

现在我想做 by=g并且两行 9 和 10 将被合并在一起,因为它们具有相同的值 NA .
> DT[,.N, by=g]
g N
1: 1 3
2: 2 5
3: NA 2

我想保留 NA输出中的行,但想跳过结果中的计算部分,即获取输出,其中 N g时为空是 NA
> DT[,.N, by=g]
g N
1: 1 3
2: 2 5
3: NA NA

我以为我可以访问 g 的值通过 .GRP但这仅给出了组索引而不是值。是否可以根据 by 的缺失状态进行计算?多变的?

最佳答案

你可以试试这个:

DT[, .N * NA^is.na(g), by = g]

    g V1
1: 1 3
2: 2 5
3: NA NA


它是 Henrik's 的代数版本 if ... else ...条款。
它使用的事实是 NA^0返回 1NA^1返回 NA还有那个 FALSETRUE可以强制到 01 , 分别

如果要控制列名:
DT[, .(n = .N * NA^is.na(g)), by = g]

    g  n
1: 1 3
2: 2 5
3: NA NA


或者,如果上面看起来很棘手,您可以求助于 data.table 链接(感谢 Sotos 提出这一点):
DT[, .N, by = g][is.na(g), N := NA][]

这将改变 N 的值聚合后。

关于r - 跳过 data.table 中的 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47444012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com