2017-11-18 23 views
-2

forループでgroup byを使用しようとしています。私は各コラムを循環させることによってグルップを欲しがっています。そして、私は要約アクションを実行することができます。 groupby内でcolnames(df [i])を使用しようとしましたが、colnamesが引用符で戻ってきたのでこのメソッドは機能しません。forループでのdplyr-group by r

提案がありますか?

+1

「iris」または「mtcars」を使用してコード例を作成できますか? 'dplyr'を使ってより良い方法があるように聞こえます – Nate

+1

あなたのデータとあなたが試したことを教えてください。 [MVCE](https://stackoverflow.com/help/mcve) – skrubber

答えて

3

forループを使用してデッドセットされていない場合は、必要に応じてdplyr :: summarise_allまたはdplyr :: sumarise_atを使用するのが最も簡単な方法です。

df <- tibble(
    var1 = c(rep("a", 5), rep("b", 5)), 
    var2 = rnorm(10), 
    var3 = rnorm(10) 
) 

df %>% 
    group_by(var1) %>% 
    summarise_all(funs(mean = mean)) 

# A tibble: 2 x 3 
    var1 var2_mean var3_mean 
    <chr>  <dbl>  <dbl> 
1  a -0.2715518 -0.6146812 
2  b 0.1502118 -0.2061952 

更新:

申し訳ありませんが、私は以前質問を読み違えます。応答変数ではなく、 "group_by"変数をループしたいとします。

これはtidy evalで行うことができます。次に例を示します。

df <- tibble(
    var1 = c(rep("a", 5), rep("b", 5)), 
    var2 = c(rep("c", 3), rep("d", 7)), 
    var3 = rnorm(10) 
) 

groups <- c(quo(var1), quo(var2)) # Create a quoture 

for (i in seq_along(groups)) { 
    df %>% 
    group_by(!!groups[[i]]) %>% # Unquote with !! 
    summarise(mean = mean(var3)) %>% 
    print() 
} 

# A tibble: 2 x 2 
    var1  mean 
    <chr>  <dbl> 
1  a -0.3451196 
2  b 0.4117763 
# A tibble: 2 x 2 
    var2  mean 
    <chr>  <dbl> 
1  c -0.2618434 
2  d 0.1598305 
+0

それは 'group_by'で各列を循環しません... – useR

+0

@useR私はあなたが意味するものを見ます。私はその質問を誤解した。 –