【问题标题】:Counting missing values in R [duplicate]计算R中的缺失值[重复]
【发布时间】:2021-02-02 03:39:23
【问题描述】:

我需要获取跨行缺失值的计数。我可以使用apply 函数做到这一点,如下所示:

x1=c(1:5,NA,8)
x2=c(1:4,NA,NA,8)
data_cmb=data.frame(x1,x2)
data_cmb$sum_na=apply(data_cmb,1,function(x)
  sum(is.na(x)))

data_cmb
  x1 x2 sum_na
1  1  1      0
2  2  2      0
3  3  3      0
4  4  4      0
5  5 NA      1
6 NA NA      2
7  8  8      0

这些天我正在学习dplyr。所以我想知道我是否可以使用r 中的dplyr 包来做同样的事情。会有这种可能吗?

感谢任何评论。

谢谢

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    dplyr 中,您可以使用rowwise 按行计算NA 的值。

    library(dplyr)
    
    data_cmb %>%
      rowwise() %>%
      mutate(sum_na = sum(is.na(c_across())))
    
    #     x1    x2 sum_na
    #  <dbl> <dbl>  <int>
    #1     1     1      0
    #2     2     2      0
    #3     3     3      0
    #4     4     4      0
    #5     5    NA      1
    #6    NA    NA      2
    #7     8     8      0
    

    另一个选项是pmap_dbl

    data_cmb %>% mutate(sum_na = purrr::pmap_dbl(., ~sum(is.na(c(...)))))
    

    base R 中的一种有效方法是将rowSumsis.na 一起使用:

    data_cmb$sum_na <- rowSums(is.na(data_cmb))
    

    可以用dplyr管道写成:

    data_cmb %>% mutate(sum_na =  rowSums(is.na(.)))
    

    【讨论】:

    • pmap_dbl 选项的优势是什么?语法很难理解,尤其是与rowSums 这样简单的语法相比
    【解决方案2】:

    我们可以在base R中使用apply

    apply(data_cmb, 1, function(x) sum(is.na(x)))
    #[1] 0 0 0 0 1 2 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多