繁体   English   中英

data.table不计算by中的NA组

[英]data.table do not compute NA groups in by

这个问题在这里有部分答案但问题太具体了,我无法将其应用于我自己的问题。

我想使用时跳过NA组的潜在的大量的计算by

library(data.table)

DT = data.table(X = sample(10), 
                Y = sample(10), 
                g1 = sample(letters[1:2], 10, TRUE),
                g2 = sample(letters[1:2], 10, TRUE))

set(DT, 1L, 3L, NA)
set(DT, 1L, 4L, NA)
set(DT, 6L, 3L, NA)
set(DT, 6L, 4L, NA)

DT[, mean(X*Y), by = .(g1,g2)]

在这里我们可以看到最多有5组,包括(NA, NA)组。 考虑到(i)该组是无用的(ii)这些组可能非常大并且(iii)实际计算比mean(X*Y)更复杂,我能否以有效的方式跳过该组? 我的意思是,没有创建剩余表的副本。 确实以下工作。

DT2 = data.table:::na.omit.data.table(DT, cols = c("g1", "g2"))
DT2[, mean(X*Y), by = .(g1,g2)]

您可以使用if子句:

DT[, if (!anyNA(.BY)) mean(X*Y), by = .(g1,g2)]

   g1 g2       V1
1:  b  a 25.75000
2:  a  b 24.00000
3:  b  b 35.33333

?.BY帮助:

.BY是一个list包含每个项目的长度1载体中by 根据组变量的值,使用if()进行分支可能很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM