【问题标题】:Error while using dplyr::summarize with seq_along使用 dplyr::summarize 和 seq_along 时出错
【发布时间】:2021-05-23 16:45:59
【问题描述】:

这里的一个无私的成员帮助我编写了以下代码,以使用 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.

我在这里缺少什么?提前致谢。

【问题讨论】:

    标签: r for-loop dplyr rlang summarize


    【解决方案1】:

    由于您使用 seq_along i 是 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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 2021-09-18
      • 2015-07-23
      • 1970-01-01
      • 2015-09-24
      相关资源
      最近更新 更多