【问题标题】:Count NAs rowwise from multiple variables provided as vector从作为向量提供的多个变量中逐行计算 NA
【发布时间】:2020-06-17 09:07:02
【问题描述】:

我有一个数据:

test_df <- data.frame(x1 = c("a", "b", "c", NA, NA), 
                      x2 = sample(1:5),
                      x3 = c(T, NA, F, T, NA),
                      x4 = c(NA, NA, 1, 2, 3),
                      stringsAsFactors = F)

colset1 <- c("x1", "x2", "x3")
colset2 <- c("x2", "x3", "x4")

包含变量名称的数据框和向量。

如何检查(最好以dplyr 方式),如果向量(colset)中提供的任何列行包含任何NAs?

colset1 的预期答案是 TRUE FALSE TRUE FALSE FALSEcolset2 的预期答案是 FALSE FALSE TRUE TRUE FALSE(最好可以作为新的逻辑变量进行变异,没关系)。

另一个问题是:如何计算那些列中的NAs? colset1 的预期答案是 0 1 0 1 2colset2 的预期答案是 1 2 0 0 1

我正在尝试变异 ...ifelse(length(sum(is.na(vars(colset1)))) == 0),但仍然缺少一些东西,它不起作用,我迷失在自己的代码中 :)

谢谢!

【问题讨论】:

    标签: r dataframe dplyr rowwise


    【解决方案1】:

    dplyr 的一个解决方案可能是:

    test_df %>%
     mutate(colset1 = Reduce(`|`, across(colset1, ~ is.na(.))),
            colset2 = Reduce(`|`, across(colset2, ~ is.na(.))))
    

    获取计数:

    test_df %>%
     mutate(colset1 = rowSums(across(colset1, ~ is.na(.))),
            colset2 = rowSums(across(colset2, ~ is.na(.))))
    
        x1 x2    x3 x4 colset1 colset2
    1    a  3  TRUE NA       0       1
    2    b  4    NA NA       1       2
    3    c  1 FALSE  1       0       0
    4 <NA>  5  TRUE  2       1       0
    5 <NA>  2    NA  3       2       1
    

    【讨论】:

      【解决方案2】:

      不需要dplyr。您可以简单地使用rowSums,即

      !rowSums(is.na(test_df[colset1])) > 0
      #[1]  TRUE FALSE  TRUE FALSE FALSE
      
      !rowSums(is.na(test_df[colset2])) > 0
      #[1] FALSE FALSE  TRUE  TRUE FALSE
      

      要获得实际的 NA 数量,您可以删除逻辑 &gt; 0 和否定符号 (!),即

      rowSums(is.na(test_df[colset1]))
      #[1] 0 1 0 1 2
      rowSums(is.na(test_df[colset2]))
      #[1] 1 2 0 0 1
      

      【讨论】:

        【解决方案3】:
        test_df
            x1 x2    x3 x4
        1    a  4  TRUE NA
        2    b  3    NA NA
        3    c  2 FALSE  1
        4   NA  5  TRUE  2
        5   NA  1    NA  3
        is_na(test_df)
                x1    x2    x3    x4
        [1,] FALSE FALSE FALSE  TRUE
        [2,] FALSE FALSE  TRUE  TRUE
        [3,] FALSE FALSE FALSE FALSE
        [4,]  TRUE FALSE FALSE FALSE
        [5,]  TRUE FALSE  TRUE FALSE
        

        使用 na.tools 包

        【讨论】:

        • 这不是答案。
        猜你喜欢
        • 2021-03-31
        • 1970-01-01
        • 2015-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        相关资源
        最近更新 更多