1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| DT = data.table(x=rep(c("b","a","c"),each=3),
v=c(1,1,1,2,2,1,1,2,2),
y=c(1,3,6),
a=as.character(1:9),
b=9:1)
X = data.table(x=c("c","c","c","b"), v=1:4, foo=c("6","24","9","92"))
# 在 data.table 裡,.() 是 list() 的縮寫,用來分組,by = .(x, v) 就是把 x, v 都一樣的row 分成同一組,同一組只會剩下一個 row,該組的 new := 該組的y 以, 串一起
aa <- DT[,.(new = paste(y,collapse = ", ")), by= .(x,v)]
# DT 併入 X,以欄位 x,v 合併,沒對倒的欄位值 NA 表示
ab <- DT[X, on= .(x,v)]
# 修改 DT ,把 X 併入 DT ,以x,v 合併,更改對到的欄位 a,沒對到的欄位 a 不變
DT[X, on= .(x,v), a:= paste0(a, ", ", i.foo)]
# 判斷每組欄位大小。 x 元素都出現3次,以 grp 數值當作 group index,對相同 grp 比較 v 數值是否等於第一個出現的 v ,只保留等於的 row
DT_1 <- DT[
, grp := (seq_len(.N) - 1) %/% 3
][
, keep := v == v[1], by = grp
][
keep == TRUE
]
|