使用purrr :: walk重命名数据帧列表中的列

时间:2017-08-08 19:47:51

标签: r dplyr purrr

我需要为列表中的所有数据框重命名第二列。我试图使用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])

当我检查列名称时,所有平均列仍然命名为&#39; mean&#39;。我做错了什么?

1 个答案:

答案 0 :(得分:4)

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

这确实涉及使用 rlang programming with dplyr的一些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