首页 > 解决方案 > dplyr - 在同一个管道中变异和计数

问题描述

我有以下数据框:

D = data_frame(gender = c("M", "M", "M", "F", "F", "F", "M", "F", "F", "F"), age = c(20, 33, 42, 32, 
55, 70, 18, 22, 30, 40))

我想计算性别,并计算每个性别的平均年龄

我努力了:

D %>% group_by(gender) %>% mutate(M = mean(age)) %>% count()

但这摆脱了已经计算的平均年龄。似乎这应该是一件容易的事......我错过了什么?

标签: rdplyrcount

解决方案


的帮助文件count()说:

tally() 是一个方便的 summarise 包装器,它可以调用 n() 或 sum(n),具体取决于您是第一次统计还是重新统计。count() 类似,但在之前调用 group_by(),之后调用 ungroup()。

所以让我们使用summarize()with n()

library(tidyverse, warn.conflicts = FALSE)
D <-tibble(gender = c("M", "M", "M", "F", "F", "F", "M", "F", "F", "F"), 
           age = c(20, 33, 42, 32, 55, 70, 18, 22, 30, 40))
D %>%
  group_by(gender) %>%
  summarize(n = n(), mean_age = mean(age))
#> # A tibble: 2 x 3
#>   gender     n mean_age
#>   <chr>  <int>    <dbl>
#> 1 F          6     41.5
#> 2 M          4     28.2

推荐阅读