【问题标题】:How to make n() do not count NAs too in tidyverse? [duplicate]如何使 n() 在 tidyverse 中也不计算 NA? [复制]
【发布时间】:2019-12-31 17:58:36
【问题描述】:

考虑下面的 MWE,我们有 Amt 表示每个 Food 项目的不同数量(从 1 到 40,NAs),另一个变量表示该食品项目的 Site。我想要一个汇总的中位数和 n() 的食品数量,但对于那些没有 NA 的食物。

MWE

 mwe <- data.frame(
  Site = sample(rep(c("Home", "Office"), size = 884)),
  Food = sample(rep(c("Banana","Apple","Egg","Berry","Tomato","Potato","Bean","Pea","Nuts","Onion","Carrot","Cabbage","Eggplant"), size=884)),
  Amt = sample(seq(1, 40, by = 0.25), size = 884, replace = TRUE)
)
random <- sample(seq(1, 884, by = 1), size = 100, replace = TRUE) # to randomly introduce 100 NAs to Amt vector
mwe$Amt[random] <- NA

数据框

    Site     Food   Amt
1 Office  Cabbage 16.50
2   Home    Apple 36.00
3 Office      Egg  7.25
4   Home    Onion 16.00
5 Office Eggplant 36.50
6   Home     Nuts    NA

摘要代码

dfsummary <- mwe %>%
  dplyr::group_by(Food, Site) %>%
  dplyr::summarise(Median = round(median(Amt, na.rm=TRUE), digits=2), N = n()) %>%
  ungroup()

输出

# A tibble: 6 x 4
  Food   Site   Median     N
  <fct>  <fct>   <dbl> <int>
1 Apple  Home     17      34
2 Apple  Office   22.2    34
3 Banana Home     19.5    34
4 Banana Office   19.9    34
5 Bean   Home     20      34
6 Bean   Office   18      34

一些食品显示 NA 值,但它们在 N 计数中发挥了作用。我只是不想在Amt 向量中计算那些带有NAs 的人。

【问题讨论】:

    标签: r dplyr tidyverse na


    【解决方案1】:

    我们可以在顶部filter,然后在不更改代码的情况下执行summarise

    library(dplyr)
    mwe %>% 
       filter(!is.na(Amt)) %>% 
       dplyr::group_by(Food, Site) %>%
        dplyr::summarise(Median = round(median(Amt, na.rm=TRUE), digits=2),
           N = n()) %>%
        ungroup()
    

    或者另一种选择是将n() 更改为sum(!is.na(Amt))

    mwe %>%
        dplyr::group_by(Food, Site) %>%
        dplyr::summarise(Median = round(median(Amt, na.rm=TRUE), digits=2), 
             N = sum(!is.na(Amt))) %>%
        ungroup()
    

    【讨论】:

    • sum(!is.na(.)) 不起作用 bcz 我认为 . 表示管道 datasum(!is.na(Amt)) 起作用。
    • @doctorate 打错了,我确实更新了那部分
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多