【问题标题】:Ignoring NAs in a dataframe when finding unique rows查找唯一行时忽略数据框中的 NA
【发布时间】:2014-11-19 15:31:20
【问题描述】:

我有一个包含 20 列和大约 200 行的数据框,我想找到唯一的行。问题是几乎每一行都混入了一些 NA:这确实是缺少数据,我希望将 NA 视为“通配符”,而不是用于匹配其他 NA。

以下两行应被识别为匹配(即非唯一)

T, S, NA, Z
NA, S, G, Z

我已经尝试了 unique 函数的 incomparables 参数,但它似乎没有实现。非常感谢。

【问题讨论】:

  • 我更新了代码。你能检查一下这是否是你想要的。

标签: r unique na


【解决方案1】:

把它放在一个双循环中:

all(na.omit(x[1,] == x[2,]))

将 1 和 2 替换为 i 和 j 以循环检查您需要检查的所有比较。

【讨论】:

    【解决方案2】:

    你可以试试

    val <-  apply(df, 1, function(x) {paste(na.omit(x), collapse='')})
    df[!duplicated(val),]
    #    V1 V2   V3 V4
    #1    T  S <NA>  Z
    #2 <NA>  S    G  Z
    #3    S  G    Z  T
    

    数据

     df <- structure(list(V1 = c("T", NA, "S", "S", "S"), V2 = c("S", "S", 
     "G", NA, "G"), V3 = c(NA, "G", "Z", "Z", NA), V4 = c("Z", "Z", 
     "T", "G", "Z")), .Names = c("V1", "V2", "V3", "V4"), row.names = c(NA, 
     -5L), class = "data.frame")
    

    【讨论】:

    • 谢谢,但行中值的顺序很重要。
    猜你喜欢
    • 2016-07-19
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多