【发布时间】:2016-07-26 01:11:01
【问题描述】:
我想按组计算我的数据集中的冲突数量。我觉得在 data.table 中必须有一种简单的方法来做到这一点,但似乎无法弄清楚。我创建了一个虚拟变量来告诉我 data.table 的每一行是否存在冲突:
testDT <- data.table(Name = c(rep('A',6),rep('B',5)),
Division = c(rep(11,6),rep(12,5)),
ID = c(205,205,NA,201,201,201,203,203,203,204,NA),
Conflict = c(0,0,0,1,1,1,1,1,1,1,0))
我需要计算冲突标志为 1 的非 NA ID 的唯一数量,并将新列中的计数应用于每个 Name-Division 分组。答案应该是这样的:
testDT[, Count := c(rep(1,6),rep(2,5))]
Name Division ID Conflict Count
1: A 11 205 0 1
2: A 11 205 0 1
3: A 11 NA 0 1
4: A 11 201 1 1
5: A 11 201 1 1
6: A 11 201 1 1
7: B 12 203 1 2
8: B 12 203 1 2
9: B 12 203 1 2
10: B 12 204 1 2
11: B 12 NA 0 2
我一直在考虑 sum(!is.na(unique(ID))) 的一些用法,但我不确定如何在 data.table (Conflict == 1) 的 i 部分不创建条件的情况下有条件地计算唯一值。
【问题讨论】:
标签: r data.table