【问题标题】:With tidyverse in R there is something similar as colSums(is.na(df))?在 R 中使用 tidyverse 有类似于 colSums(is.na(df))?
【发布时间】:2021-03-25 17:26:23
【问题描述】:

在 tidyverse(dplyr) 中有类似的东西:

colSums(is.na(airquality))?

换句话说,我怎样才能有一个数据框,其中一行总结了每列中NA 值的数量?

我虽然即将使用摘要。但是我该怎么做呢?

有什么帮助吗?

谢谢

【问题讨论】:

    标签: r dplyr tidyverse


    【解决方案1】:

    您可以汇总所有列,例如计算NA的数量:

    library(haven)
    temp <- tempfile()
    download.file("https://www.diw.de/documents/dokumentenarchiv/17/diw_01.c.412698.de/soep_lebensz_en.zip",temp)
    soep <- read_dta(unz(temp, "soep_lebensz_en.dta"))
    unlink(temp)
    
    colSums(is.na(soep))
    
        id       year        sex  education    no_kids health_org satisf_org health_std satisf_std 
         0          0          0       1468        906         15          0         15          0 
    
    library(tidyverse)
    soep %>%
       summarise(across(everything(), ~ sum(is.na(.))))
    
    # A tibble: 1 x 9
         id  year   sex education no_kids health_org satisf_org health_std satisf_std
      <int> <int> <int>     <int>   <int>      <int>      <int>      <int>      <int>
    1     0     0     0      1468     906         15          0         15          0
    

    【讨论】:

    • 惊人的@Marco!
    【解决方案2】:

    dplyr 等效于 colSumssummarize(across(everything(), sum))。我们可以像这样添加is.na

    summarize(across(everything(), ~ sum(is.na(.))))
    

    这将返回一个数据帧,并且可以很好地与group_by 配合使用,这可能会很好。

    【讨论】:

      【解决方案3】:

      你可以试试这个:

      library(tidyverse)
      airquality %>% 
        map_dbl(~sum(is.na(.)))
      

      或者按照 Thomas 在 cmets 中的建议

      airquality %>% is.na %>% map_dbl(sum)
      

      【讨论】:

      • @GregorThomas,谢谢,我明白了,这是我养成的习惯,但你说得对,代码更清晰
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      • 2021-12-29
      相关资源
      最近更新 更多