【问题标题】:rename a column in a list of dataframes in using purrr::walk使用 purrr::walk 重命名数据框列表中的列
【发布时间】:2017-08-09 04:03:17
【问题描述】:

我需要为列表中的所有数据框重命名第二列。我正在尝试使用 purrr::walk。

代码如下:

cyl.name<- c('4-cyl', '6-cyl', '8-cyl')
cyl<- c(4,6,8)    
car <- map(cyl, ~mtcars %>% filter(cyl==.x) %>%
                     group_by(gear) %>% 
                     summarise(mean=mean(hp)) )
walk (seq_along(cyl.name), function (x) names(car[[x]])[2]<- cyl.name[x])

当我检查列名时,所有平均列仍然命名为“平均”。我做错了什么?

【问题讨论】:

  • 你让你的数据结构比它需要的更复杂和凌乱;你只需要mtcars %&gt;% group_by(gear, cyl) %&gt;% summarise(mean = mean(hp))

标签: r dplyr purrr


【解决方案1】:

如果您有这样的列名列表,您可以使用map2 同时循环遍历filter 变量和命名变量。这将允许您随时命名列,而不是在创建列表后重命名。

这确实涉及对programming with dplyr 使用rlang 中的一些tidyeval 操作。

map2(cyl, cyl.name, ~mtcars %>% 
         filter(cyl==.x) %>%
         group_by(gear) %>%
         summarise( !!.y := mean(hp)) )

[[1]]
# A tibble: 3 x 2
   gear `4-cyl`
  <dbl>   <dbl>
1     3      97
2     4      76
3     5     102

[[2]]
# A tibble: 3 x 2
   gear `6-cyl`
  <dbl>   <dbl>
1     3   107.5
2     4   116.5
3     5   175.0

[[3]]
# A tibble: 2 x 2
   gear  `8-cyl`
  <dbl>    <dbl>
1     3 194.1667
2     5 299.5000

【讨论】:

    猜你喜欢
    • 2018-03-18
    • 2022-08-09
    • 2020-02-24
    • 2018-01-04
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多