如何在整洁的数据表中计算每个组的出现次数?

4
我想要计算每个分组中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并用标记的组号补全?)

3个回答

4
也许可以在标记列上使用 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

1
DT[, num_markers := (.SD[marker, .N]), by = id]

这个句子的意思是:

> DT
   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

-1

使用ave的另一个选项

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

这提供了

> DT
   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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接