我需要为列表中的所有数据框重命名第二列。我试图使用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;。我做错了什么?
答案 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