【问题标题】:Group by count NAs as zeros [duplicate]按计数NAs分组为零[重复]
【发布时间】:2021-03-07 21:38:38
【问题描述】:

我尝试在数据框的一列中用NA 计算group_by 中的值。我有这样的数据:

> df <- data.frame(id = c(1, 2, 3, NA, 4, NA),
                 group = c("A", "A", "B", "C", "D", "E"))
> df
  id group
1  1     A
2  2     A
3  3     B
4 NA     C
5  4     D
6 NA     E

我想将第一列中具有 NA 的组计数为 0,但采用这样的方法

> df %>% group_by(group) %>% summarise(n = n())
# A tibble: 5 x 2
  group     n
* <chr> <int>
1 A         2
2 B         1
3 C         1
4 D         1
5 E         1

我在行中有1 CE,但没有我想要的 0。 预期结果如下所示:

# A tibble: 5 x 2
  group     n
* <chr> <int>
1 A         2
2 B         1
3 C         0
4 D         1
5 E         0

我该怎么做?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我们可以获取使用is.na 创建的逻辑向量的sum 以得到TRUE =&gt; 1FALSE =&gt; 0 的计数,因此sum 返回非NA 元素的计数

    library(dplyr)
    df %>% 
       group_by(group) %>% 
       summarise(n = sum(!is.na(id)))
    # A tibble: 5 x 2
    #    group     n
    # * <chr> <int>
    #1 A         2
    #2 B         1
    #3 C         0
    #4 D         1
    #5 E         0
    

    或者在子集之后使用length

    df %>%
       group_by(group) %>% 
       summarise(n = length(id[!is.na(id)]))
    

    n() 返回包含缺失值的总行数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-11
      相关资源
      最近更新 更多