R 删除另一行中包含的多余重复项

问题描述 投票:0回答:1

我有一个想要减少的“索引”数据集。我想减少与另一行相比相同但具有 NA 的行。但是,如果一列中包含另一列中没有的信息,我不想删除行。例如:

第 1 栏 第 2 栏 第3栏 第 4 栏 第 5 栏
A B D G 不适用
A B 不适用 不适用 不适用
A B 不适用 不适用 H
不适用 不适用 D G 不适用
不适用 不适用 不适用 不适用 H

会减少到

第 1 栏 第 2 栏 第3栏 第 4 栏 第 5 栏
A B D G 不适用
A B 不适用 不适用 H

由于第 2 行和第 4 行是第 1 行的较弱重复项,因此它们被删除。第 3 行与第 1 行不同,因为它有 H,因此包含我想要保留的信息,并且不是第 1 行的重复。第 5 行是第 3 行的重复,是否也将其删除。

我想将其应用到很多列,所以我相信不使用“group_by”。有编码建议吗?

我考虑过 dplyr、group_by、na.omit 和重复项,但找不到合适的 R代码:

data= data.frame(col1=c("A", "A", "A", NA, NA),
                 col2=c("B", "B", "B", NA, NA),
                 col3=c("D", NA, NA, "D", NA),
                 col4=c("G", NA, NA, "G", NA),
                 col5=c(NA, NA, "H", NA,"H"))
r dplyr duplicates
1个回答
0
投票

这是一个基本的 R 方法:

keep <- sapply(1:nrow(quux), function(rn1) {
  for (rn2 in setdiff(1:nrow(quux), rn1)) {
    weakerdupe <- mapply(quux[rn1,], quux[rn2,], FUN = function(a, b) a %in% c(b, NA))
    if (all(weakerdupe) && sum(is.na(quux[rn1,])) >= sum(is.na(quux[rn2,]))) return(FALSE)
  }
  TRUE
})
quux[keep,]
#   Col1 Col2 Col3 Col4 Col5
# 1    A    B    D    G <NA>
# 3    A    B <NA> <NA>    H
© www.soinside.com 2019 - 2024. All rights reserved.