2017-08-08 11 views
0

リスト内のすべてのデータフレームの2番目の列の名前を変更する必要があります。私は、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)%>% 要約(平均=平均(hp))' – alistaire

答えて

4

このような列名のリストをお持ちの場合は、map2を使用して、filter変数と命名変数を同時にループすることができます。これにより、リストの作成後に名前を変更するのではなく、列の名前を付けることができます。

これは、tidyeval操作をrlangprogramming 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

関連する問題