如何过滤,然后管道并使用 sum 函数?

Mil*_*les 5 r tidyverse

例如,以下将不起作用:

data(mpg)

filter(mpg, manufacturer =="audi") %>%
    sum(.$cty)
Run Code Online (Sandbox Code Playgroud)

但是,以下将起作用:

data(mpg)

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

sum(x$cty)
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我想让这一切都在管道流动中工作。

Ron*_*hah 8

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

library(dplyr)

mpg %>%
  filter(manufacturer =="audi") %>%
  pull(cty) %>%
  sum
#[1] 317
Run Code Online (Sandbox Code Playgroud)

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

filter(mpg, manufacturer =="audi") %>% {sum(.$cty)}
Run Code Online (Sandbox Code Playgroud)

  • @MilesMorales 左侧,右侧。如果你执行 `mpg %&gt;% summarise(sum = sum(cty))`,`?summarise` 的第一个参数是 `.data`,即 `mpg`,并且使用管道隐式传递给 `summarise`。使用“{}”我们可以阻止这种行为。 (2认同)