gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:27:23 24 4
gpt4 key购买 nike

我有一个如下所示的数据框。我想找到唯一的行(唯一性)。但是在这个数据中我有'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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com