基于if的数据框中的唯一行

时间:2017-08-11 09:46:19

标签: r if-statement data.table

我有一个大型数据表(数百万行),我需要将行减少到每个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有效合作。

1 个答案:

答案 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