首页 > 解决方案 > 如何计算整齐的 data.table 中每个组的出现次数?

问题描述

我想在一个整洁的 data.table 中计算每个组有多少个 TRUE 标记:

DT <- data.table(      id = c(1   ,1    ,1    ,2   ,2    ,2   ,2   ,2    )
                 , marker = c(TRUE,FALSE,FALSE,TRUE,FALSE,TRUE,TRUE,FALSE))

所以我尝试DT[marker==TRUE, num_markers := .N, by = id]了,输出:

   id marker num_markers
1:  1   TRUE           1
2:  1  FALSE          NA
3:  1  FALSE          NA
4:  2   TRUE           3
5:  2  FALSE          NA
6:  2   TRUE           3
7:  2   TRUE           3
8:  2  FALSE          NA

相反,所需的输出是:

   id marker num_markers
1:  1   TRUE           1
2:  1  FALSE           1
3:  1  FALSE           1
4:  2   TRUE           3
5:  2  FALSE           3
6:  2   TRUE           3
7:  2   TRUE           3
8:  2  FALSE           3

如何调整代码以获得所需的输出(删除每个 id 的 NA 并完成标记的组数?)

标签: rdata.table

解决方案


也许在标记列上使用sum :

DT[, num_markers := sum(marker), by = id ][]

#    id marker num_markers
# 1:  1   TRUE           1
# 2:  1  FALSE           1
# 3:  1  FALSE           1
# 4:  2   TRUE           3
# 5:  2  FALSE           3
# 6:  2   TRUE           3
# 7:  2   TRUE           3
# 8:  2  FALSE           3

推荐阅读