【发布时间】:2021-08-12 21:10:09
【问题描述】:
我在 R 中创建了以下 data.table:
> DT
ID num code
1: b 1 C1
2: b 1 C1
3: b 1 C1
4: b 1 C1
5: b 1
6: b 3
7: b 3 C1
8: a 3 C2
9: a 3 C3
10: a 3 C3
11: a 3
12: c 4 C3
其中空值是空字符串""。然后我运行指令
res <- DT[, .(agg_code = unique(code)[!(code == "")]), .(ID, num)]
导致
> res
ID num agg_code
1: b 1 C1
2: b 1
3: b 1 <NA>
4: b 1 <NA>
5: b 3 C1
6: a 3 C2
7: a 3 C3
8: a 3
9: c 4 C3
我的问题是:这个命令实际上在做什么?我知道它是按 ID 和 num 分组的,我不明白 unique(code) 和 [!(code == "")] 是如何工作的。他们正在删除一些行,但他们也保留一些"" 并创建一些<NA>。这里发生了什么?
为了完整起见,DT 由以下人员创建
DT = data.table(
ID = c("b","b","b", "b","b", "b","b","a","a","a","a", "c"),
num = c(1,1,1,1,1,3,3,3,3,3,3,4),
code = c("C1", "C1","C1","C1", "", "","C1", "C2", "C3", "C3","", "C3")
)
【问题讨论】:
标签: r data.table filtering grouping unique