将 dplyr::summarize 与 seq_along 一起使用时出错
Error while using dplyr::summarize with seq_along
这里一位无私的会员帮助我编写了以下代码,使用for循环和dplyr::summarize
生成变量。正如预期的那样,这段代码工作正常。
library(nycflights13)
flights <- nycflights13::flights %>%
select(carrier,distance,hour)
by_carrier <- NULL
for ( i in c("distance", "hour") {
df <-
flights %>%
dplyr::group_by(carrier) %>%
dplyr::summarize(!!as.name(i) := sum(!!as.name(i) ))
by_carrier <- bind_cols(by_carrier,df)
}
但是当我按以下方式更改for循环参数时,遇到错误:
var_interest <- c("distance", "hour")
by_carrier <- NULL
for ( i in seq_along(var_interest)) {
df <-
flights %>%
dplyr::group_by(carrier) %>%
dplyr::summarize(!!as.name(i) := sum(!!as.name(i) ))
by_carrier <- bind_cols(by_carrier,df)
}
错误如下:
Error: Problem with `summarise()` input `1`.
x object '1' not found
i Input `1` is `sum(`1`)`.
i The error occurred in group 1: carrier = "9E".
Run `rlang::last_error()` to see where the error occurred.
我在这里错过了什么?提前致谢。
由于您使用的是 seq_along
i
is 1, 2 这不是数据中列的名称。将 for
循环更改为 for (i in var_interest)
或在循环内使用 var_interest[i]
。
library(dplyr)
by_carrier <- NULL
var_interest <- c("distance", "hour")
for (i in var_interest) {
df <-
flights %>%
dplyr::group_by(carrier) %>%
dplyr::summarize(!!as.name(i) := sum(!!as.name(i) ))
by_carrier <- bind_cols(by_carrier,df)
}
也许更好的选择是使用 across
而不是循环。
flights %>%
group_by(carrier) %>%
summarise(across(all_of(var_interest), sum))
这里一位无私的会员帮助我编写了以下代码,使用for循环和dplyr::summarize
生成变量。正如预期的那样,这段代码工作正常。
library(nycflights13)
flights <- nycflights13::flights %>%
select(carrier,distance,hour)
by_carrier <- NULL
for ( i in c("distance", "hour") {
df <-
flights %>%
dplyr::group_by(carrier) %>%
dplyr::summarize(!!as.name(i) := sum(!!as.name(i) ))
by_carrier <- bind_cols(by_carrier,df)
}
但是当我按以下方式更改for循环参数时,遇到错误:
var_interest <- c("distance", "hour")
by_carrier <- NULL
for ( i in seq_along(var_interest)) {
df <-
flights %>%
dplyr::group_by(carrier) %>%
dplyr::summarize(!!as.name(i) := sum(!!as.name(i) ))
by_carrier <- bind_cols(by_carrier,df)
}
错误如下:
Error: Problem with `summarise()` input `1`.
x object '1' not found
i Input `1` is `sum(`1`)`.
i The error occurred in group 1: carrier = "9E".
Run `rlang::last_error()` to see where the error occurred.
我在这里错过了什么?提前致谢。
由于您使用的是 seq_along
i
is 1, 2 这不是数据中列的名称。将 for
循环更改为 for (i in var_interest)
或在循环内使用 var_interest[i]
。
library(dplyr)
by_carrier <- NULL
var_interest <- c("distance", "hour")
for (i in var_interest) {
df <-
flights %>%
dplyr::group_by(carrier) %>%
dplyr::summarize(!!as.name(i) := sum(!!as.name(i) ))
by_carrier <- bind_cols(by_carrier,df)
}
也许更好的选择是使用 across
而不是循环。
flights %>%
group_by(carrier) %>%
summarise(across(all_of(var_interest), sum))