私のdf
はdf
(つまり重複がある場合)の一致があるかどうかを指定するlink
列(型リスト)を持ちます。一致の列に基づいてdfの重複した行を削除する
df <- data.frame(id=1:7,link=I(list(c(2,3),c(1,3),c(1,2),NA,NA,7,6)))
id link
1 1 2, 3
2 2 1, 3
3 3 1, 2
4 4 NA
5 5 NA
6 6 7
7 7 6
Iは、リンクされたレコードをそれらの行のためにのみ最初に一致した行(すなわち、IDによって注文に対して)を維持するdf
をサブセットたいです。私がしたい:
id link
1 1 2, 3
2 4 NA
3 5 NA
4 6 7
私はto_remove
にdf
から削除する行のid
値を格納するためにループを試してみました。それは現時点ではうまくいきません。私はこれを思っています。
to_remove <- character(0)
for (n in 1:nrow(df)) {
links <- df$link[[n]]
if (all(is.na(links))) next # skip if no links available
add <- ifelse(links %in% to_remove, NA,links)
add <- add[!is.na(add)]
if (length(add > 0)) to_remove <- c(to_remove,add)
}
これを簡単な方法で行い、ループを回避することはできますか?
最終行が含まれていないのはなぜですか(7 6)。 – akrun
'id == 6 'の行の' link'の値は '7'です。これは、 '6'と' 7'が実際に同じレコードであることを示しています。一致したレコードの最初の出現のみを保持したいとします(つまり、 'id == 6のみを保持し、' id == 7'を破棄します) 。 –