【问题标题】:dplyr- group by in a for loop r [closed]dplyr-在for循环r中分组[关闭]
【发布时间】:2018-05-02 05:31:01
【问题描述】:

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

有什么建议吗?

【问题讨论】:

  • 你能用iris或mtcars做一个编码例子吗?听起来好像有更好的方法通过dplyr
  • 向我们展示您的数据以及您的尝试。提问时使用此参考:MVCE

标签: r for-loop dplyr


【解决方案1】:

如果您不打算使用 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

【讨论】:

  • 这不会用group_by循环遍历每一列...
  • @user 我明白你的意思。我误读了这个问题。
猜你喜欢
  • 1970-01-01
  • 2015-11-26
  • 2022-01-01
  • 2019-05-03
  • 1970-01-01
  • 2019-07-28
  • 1970-01-01
  • 2017-01-09
  • 1970-01-01
相关资源
最近更新 更多