r - 在具有行 NA 的数据框中找到唯一性?

标签 r dataframe unique uniqueidentifier substitution

我有一个如下所示的数据框。我想找到唯一的行(唯一性)。但是在这个数据中我有'NA'。我喜欢如果一行中具有 NA 值的所有值都与其他行相同(如行:1,2,5)我想忽略它,但如果不相同(如行:2,4)我想保留它作为独特的行。 例如,在第 1、2 和 6 行中,除 NA 之外的所有值都相同,因为 NA 可以是值“1 和 3”,所以我想删除这一行并只保留第 2 行。 此外,在第 6 行中,值 2 和 3(不包括 NA)与行 c2 和 c5 相同,并且 c6 中的 NA 可能获得与 c2 和 c5 相同的值,因此该行不是唯一的。

此外,@Sotos 解决方案对我有更多帮助,但在为行创建模式时删除 NA 后的最后一部分,他的解决方案考虑了 c8 和 c6 的相同模式 (23) 并将它们删除。但实际上 c8 是独一无二的。

数据:

      a1  a2   a3   a4
c1    2    1    3   NA
c2    2    1    3    3
c3    2    1    4    3
c4    2    2    3   NA
c5    2    1    3    3
c6    2    NA   3   NA
c7    2    NA   0   NA
c8    2    3   NA   NA

我想要这样的输出:

输出:

     a1    a2  a3   a4
c2    2    1    3    3
c3    2    1    4    3
c4    2    2    3   NA
c7    2    NA   0   NA
c8    2    3   NA   NA

最佳答案

library(stringr) 
df <- unique(df)
#paste rows omitting NAs
df$new <- apply(df, 1, function(i) paste(na.omit(i), collapse = ''))
#use str_detect to determine whether each pattern is found more than once
df$new2 <- rowSums(sapply(df$new, function(i) str_detect(i, df$new)))
new_df <- subset(df, df$new2 == 1)
new_df <- new_df[, !names(new_df) %in% c('new', 'new2')]
new_df
#   V2 V3 V4 V5
#2  2  1  3  3
#3  2  1  4  3
#4  2  2  3 NA

根据您的评论使用附加行测试代码:

new_df
#   a1 a2 a3 a4
#c2  2  1  3  3
#c3  2  1  4  3
#c4  2  2  3 NA
#c7  2 NA  0 NA

数据

dput(df)
structure(list(a1 = c(2L, 2L, 2L, 2L, 2L, 2L, 2L), a2 = c(1L, 
1L, 1L, 2L, 1L, NA, NA), a3 = c(3L, 3L, 4L, 3L, 3L, 3L, 0L), 
    a4 = c(NA, 3L, 3L, NA, 3L, NA, NA)), .Names = c("a1", "a2", 
"a3", "a4"), class = "data.frame", row.names = c("c1", "c2", 
"c3", "c4", "c5", "c6", "c7"))

关于r - 在具有行 NA 的数据框中找到唯一性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36327084/

相关文章:

python - Groupby 算作一列,groupby 计算 Pandas 中另一列的唯一值数

javascript - 将嵌套数组组合成具有唯一项的单个数组

r - 带有 xts 对象和虚拟交互项的线性回归

function - R 存在函数吗?

r - 使用haven::write_sav() 放大.sav 文件大小

python - Pandas 数据框到 excel 文件中的特定工作表而不会丢失格式

python - 如何对字符串形式的数字列表的数据框列求和?

algorithm - Facebook 如何生成唯一标识符

python - 如何根据python中的多个条件计算列中的唯一行

python - 从 python 运行脚本时的 R 输出