【问题标题】:dplyr filter tens of columns [duplicate]dplyr过滤数十列[重复]
【发布时间】:2018-06-13 16:15:47
【问题描述】:

假设我有一个 27 列的数据框。第一列是 ID,其余列(A 到 Z)只是数据。我想取出 A 到 Z 列为 NA 的所有行。我该怎么做? 直接的方法就是

data %>%
filter(!(is.na(A) & is.na(B) .... & is.na(Z)))

有没有更有效或更简单的方法来做到这一点?

这个问题与This one 不同,因为我想排除值为 ALL NA 的行,并保留值为部分 NA 的行。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    使用tidyverse

    library(tidyverse)
    

    加载数据:

    ID <- c(1:8)
    Col1<-c(34564,NA,43456,NA,45655,6789,99999,87667)
    Col2<-c(34565,43456,55555,NA,65433,22234,NA,98909)
    Col3<-c(45673,88789,11123,NA,55676,76566,NA,NA)
    
    mydf <- data_frame(ID,Col1,Col2,Col3)
    mydf %>% 
        slice(which(complete.cases(.)))
    

    您是否要保留选定的列,删除您可能运行的所有 NA 的行:

    mydf %>% 
        mutate(full_incomplete_cases=rowSums(is.na(.[-1]))) %>% 
        filter(full_incomplete_cases<length(mydf[,-1])) %>% 
        select(ID:Col3)
    

    【讨论】:

    • 您好,感谢您的回复。我想要的是排除 col A 到 Col Z 都是 NA 的那些行,并保留那些一些列是 NA 并且一些是值的行。
    • 现在我无法处理它。稍后我会改变我的答案。无论如何,您的第一个问题有点不同;-)
    • @Z.Lu 我为你推荐了两个解决方案
    猜你喜欢
    • 1970-01-01
    • 2019-08-08
    • 2019-03-01
    • 1970-01-01
    • 2019-07-14
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    相关资源
    最近更新 更多