0
:Data.tableは、私のようなテーブル持って参加し、左および集計/ CONCATENATE/GROUP_CONCAT
x = data.table(Id=c(1,1,2,3,3,4), Name=c("A", "A", "B", "C", "C", "D"), TxId=c(10, 11, 20, 30, 31, 40))
#Id Name TxId
#1: 1 A 10
#2: 1 A 11
#3: 2 B 20
#4: 3 C 30
#5: 3 C 31
#6: 4 D 40
y = data.table(Name=c("A", "B", "B", "C"), Family=c("A-alpha", "B-beta", "B-gamma", "C-delta"))
# Name Family
#1: A A-alpha
#2: B B-beta
#3: B B-gamma
#4: C C-delta
私は左に参加し、連結を行うことができますが、私は唯一のX.
で、各行に1つの出力行をしたいです# Left join X to Y on Name column
xy = y[x, on="Name"]
# Name Family Id TxId
#1: A A-alpha 1 10
#2: A A-alpha 1 11
#3: B B-beta 2 20
#4: B B-gamma 2 20
#5: C C-delta 3 30
#6: C C-delta 3 31
#7: D NA 4 40
# Concatenate Family column
xy[, Family:=paste0(Family, collapse=", "), by=c("Name", "TxId")]
# Name Family Id TxId
#1: A A-alpha 1 10
#2: A A-alpha 1 11
#3: B B-beta, B-gamma 2 20
#4: B B-beta, B-gamma 2 20
#5: C C-delta 3 30
#6: C C-delta 3 31
#7: D NA 4 40
Bの余分な行を削除する方法を教えてください。私はId/TxId上でそれが一意であることを望みます。すなわち
# Name Family Id TxId
#1: A A-alpha 1 10
#2: A A-alpha 1 11
#3: B B-beta, B-gamma 2 20
#5: C C-delta 3 30
#6: C C-delta 3 31
#7: D NA 4 40
私はエディとしてコメントを行う場合は、次の
xy[, .(Family=paste0(Family, collapse=", "), by=c("Name", "TxId")])
を私は正しい結果を得ることができます。しかし、私は他の列を追加しようとした場合、それは動作しません(私は:=
バージョンを行っていたかのように、私は同じ結果を得る):
xy[, .(Id, Family=paste0(Family, collapse=", ")), by=c("Name", "TxId")]
新しい列を作成せず、代わりに 'xy [、family = paste0(...)] by by = ...]' – eddi
'xy [、family(paste = – Uwe
@UweBlock、いいえ、私はそれを試していませんでした。それは直感的ですが、それは動作します!私が作品を見つけたのはユニークですが、あなたのアプローチは約30%速くなっています。 –