这个问题有部分答案here https://stackoverflow.com/questions/47444012/skip-na-in-data-table-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)]