【问题标题】:how to filter, then pipe and use sum function?如何过滤,然后管道和使用 sum 函数?
【发布时间】:2020-06-12 01:53:29
【问题描述】:

例如以下将不起作用:

data(mpg)

filter(mpg, manufacturer =="audi") %>%
    sum(.$cty)

但是以下方法会起作用:

data(mpg)

x <- filter(mpg, manufacturer =="audi")

sum(x$cty)

如果可能的话,我想让它全部在管道流中工作。

【问题讨论】:

    标签: r tidyverse


    【解决方案1】:

    您可以使用pull 将列作为向量,然后使用sum

    library(dplyr)
    
    mpg %>%
      filter(manufacturer =="audi") %>%
      pull(cty) %>%
      sum
    #[1] 317
    

    您的尝试不起作用,因为管道将 LHS 的输出作为第一个参数发送到 RHS 中的函数。因此,数据帧作为sum 中的第一个参数传递。如果您在它周围使用{},它将起作用。

    filter(mpg, manufacturer =="audi") %>% {sum(.$cty)}
    

    【讨论】:

    • 什么是 LHS 和 RHS,{} 用外行术语来说基本上是做什么的?
    • @MilesMorales 左侧,右侧。如果你使用mpg %&gt;% summarise(sum = sum(cty))?summarise 的第一个参数是.data,即mpg,它在这里使用管道隐式传递给summarise。使用{} 我们可以阻止这种行为。
    【解决方案2】:

    我们可以通过在 summarise 本身中执行此操作而无需 filter 步骤来完成此操作

    library(dplyr)
    library(ggplot2)
    mpg %>% 
       summarise(out = sum(cty[manufacturer == "audi"])) %>%
       pull(out)
     #[1] 317
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多