dplyr-在for循环中分组r

时间:2017-11-18 15:14:42

标签: r for-loop dplyr

我正在尝试在for循环中使用group by。我希望gourp by循环遍历每一列,然后我可以执行一个总结操作。我试图在groupby中使用colnames(df [i]),但因为colnames带有引号,所以这个方法不起作用。

有什么建议吗?

1 个答案:

答案 0 :(得分: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

<强>更新

抱歉,我之前误解了这个问题。你想循环遍历&#34; group_by&#34;变量 - 不是响应变量。

您可以使用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