我的df
有一个link
列(类型列表),指定记录是否在df
(即它是否有重复项)内匹配。根据匹配列删除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
我想子集df
只保留第一个匹配的行(即相对于由ID订购),用于与链接的记录这些行。我想:
id link
1 1 2, 3
2 4 NA
3 5 NA
4 6 7
我已经尝试了循环存储行的id
值从df
在to_remove
删除。目前情况并不奏效,我觉得我正在反思这一点。
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') 。 –