【问题标题】:Return vector of names where NA is greater than a set value返回 NA 大于设定值的名称向量
【发布时间】:2021-06-18 06:53:09
【问题描述】:

我想为少于 3 个 NA 的列创建一个列名向量。这是我的数据以及到目前为止我尝试过的数据:

df <- data.frame("A" =  c(1,3,4,6,NA,3,NA),
           "B" = c(2,4,5,6,7,8,9),
           "C" = c(3,4,NA,NA,2,3,NA))

NA.list <- map(df, function (x) sum(is.na(x))>=3)

我想创建一个类似这样的输出:

names <- c("A", "B")

有什么想法吗?

【问题讨论】:

    标签: r function dataframe iteration purrr


    【解决方案1】:

    一个简单的解决方案

    colnames(df[colSums(is.na(df)) < 3])
    
    [1] "A" "B"
    

    【讨论】:

      【解决方案2】:

      使用Filter

      names(Filter(function(x) x < 3, colSums(is.na(df))))
      #[1] "A" "B"
      

      同样的逻辑你也可以使用purrr::keep

      names(purrr::keep(df, ~sum(is.na(.x)) < 3))
      

      【讨论】:

        【解决方案3】:

        有了dplyr,我们可以使用select

        library(df)
        df %>%
            select(where(~ sum(is.na(.)) < 3)) %>%
            names
        #[1] "A" "B"
        

        或者使用base R

        names(which(sapply(df, function(x) sum(is.na(x))) < 3))
        #[1] "A" "B"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-18
          • 2017-07-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多