如何使用管道运算符过滤并计算均值?

时间:2018-10-22 22:44:07

标签: r dplyr

我想过滤一个数据框,然后计算一列的平均值。但是我想使用管道运算符,我不确定该怎么做。

数据框名称为vocab,而我要过滤的年份为2016。我要计算平均值的列的名称为education

vocab %>%
  filter(year == 2016) %>%
  mean(vocab$education)

我在这里混合使用dplyr和base r语法吗?我必须只对管道运算符使用dplyr语法吗?

1 个答案:

答案 0 :(得分:1)

执行以下任一操作:

vocab %>%
  filter(year == 2016) %>%
  summarize_at(vars(education), mean)

vocab %>%
  filter(year == 2016) %>%
  summarize_at("education", mean)

vocab %>%
  filter(year == 2016) %>%
  summarize(education = mean(education))

vocab %>%
  filter(year == 2016) %>%
  pull(education) %>%
  mean

问题不仅仅在于混合语法,而是更多地在于了解您在做什么,管道将其左侧馈入右侧函数的第一个参数,因此您的尝试意味着:

  mean(vocab %>% filter(year == 2016), vocab$education)
  # or 
  mean(filter(vocab, year == 2016), vocab$education)

那没有道理。

话虽如此,实际上您不会在管道链中看到很多$被使用,因为其他选项更适合语法,并且$进行部分匹配,这不是tidyverse团队喜欢的事情。