【发布时间】:2017-08-11 09:46:19
【问题描述】:
我有一个大型数据表(数百万行),我需要将其中的行缩减为每个 ID 一行。规则是,如果“X”以外的其他艺术作品在唯一 ID 中, X'es 应该被删除。但如果唯一 ID 中没有其他艺术作品,则 X 应该保留。
测试数据集:
dt <- data.table(
ID=c(1,1,1,2,2,3,4,4),
art=c("X", "Y", "X", "X", "X", "X", "Z", "X"),
redskb=c("a", "Y", "a", "b", "b", "c", "k", "n")
)
ID art redskb
1: 1 X a
2: 1 Y Y
3: 1 X a
4: 2 X b
5: 2 X b
6: 3 X c
7: 4 X k
8: 4 Z n
需要的输出:
ID art redskb
1: 1 Y Y
2: 2 X b
3: 3 X c
4: 4 Z n
我试过了
unique(dt, by = c("ID"))
但无法让它与 if 一起有效地工作。
【问题讨论】:
-
也许像
unique(dt)[, flag := if (.N == 1) TRUE else art != "X", ID][(flag)]? -
你的例子有问题,你打印的不是你定义的
标签: r if-statement data.table