IDが以前のグループに存在するかどうかを示す新しい列を作成しようとしています。私のデータは次のとおりです:data.tableの遅れたグループで一致する
data <- data.table(ID = c(1:3, c(9,2,3,4),c(5,1)),
groups = c(rep(c("a", "b", "c"), c(3, 4,2))))
ID groups
1: 1 a
2: 2 a
3: 3 a
4: 9 b
5: 2 b
6: 3 b
7: 4 b
8: 5 c
9: 1 c
遅れたグループを指定する方法がわかりません。私はshift
を使用しようとしましたが、それは働いていない:
data[,.(ID=ID,match_lagged=ID %in% shift(ID)),by=groups]
は、ここに私の望ましい結果です。
前のグループがないため、最初の3行は一致しません。 FALSEはこれらの3つの行に対しても機能します。 ID = 4(グループb)はグループaと一致しません。 ID = 5(グループc)はグループbと一致しません。
グループcのID 1はグループbと一致しないため、グループaに存在していても偽である必要があります。このため、duplicated(data$ID)
は機能しません。グループのデータは、以前のグループと一致する必要があります。
groups ID match_lagged
1: a 1 NA
2: a 2 NA
3: a 3 NA
4: b 9 FALSE
5: b 2 TRUE
6: b 3 TRUE
7: b 4 FALSE
8: c 5 FALSE
9: c 1 FALSE
dplyr
解決策も機能します。
'duplicated(data $ ID)'は機能しません。どうすればよいですか? –
@ d.bいいえ、1つのグループからのデータは、** previous **グループから照合する必要があります。私は質問が重複していない理由をより明確にするために編集しました。 –