2017-08-08 69 views
0

重命名數據框列表中的列我需要重命名列表中所有數據框的第二列。我正在嘗試使用purrr :: walk。使用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]) 

當我檢查的列名,所有的平均柱仍命名爲「是什麼意思」。我做錯了什麼?

+0

您正在使您的數據結構比需要的更加複雜和凌亂;所有你需要的是'mtcars%>% group_by(gear,cyl)%>% summary(mean = mean(hp))' – alistaire

回答

4

如果您有這樣的列名稱列表,您可以使用map2同時遍歷filter變量和命名變量。這將允許您在進行列名時指定列的名稱,而不必在創建列表後進行重命名。

這確實涉及使用rlang的一些tidyeval操作爲programming with dplyr

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 
+0

真棒!謝謝! @aosmith – zesla

+0

爲什麼我的解決方案無法正常工作?只是好奇... – zesla