我有一个大型数据表(数百万行),我需要将行减少到每个ID一个。规则是,如果另一种艺术超过" X"是唯一的ID, 应该删除X'但如果唯一身份证中没有其他艺术品,则X应保留。
测试数据集:
ID art redskb
1: 1 Y Y
2: 2 X b
3: 3 X c
4: 4 Z n
必需的输出:
unique(dt, by = c("ID"))
我试过
{{1}}
但无法让它与if有效合作。
答案 0 :(得分:5)
我尝试这样的事情:
unique(dt)[, `:=`(flag, if (.N == 1) TRUE else art != "X"), ID][(flag)]
## ID art redskb flag
## 1: 1 Y Y TRUE
## 2: 2 X b TRUE
## 3: 3 X c TRUE
## 4: 4 Z k TRUE