dplyr-for循环r中的分组依据

dplyr-for循环r中的分组依据,r,for-loop,dplyr,R,For Loop,Dplyr,我试图在for循环中使用groupby。我希望gourp by循环浏览每一列,然后我可以执行总结操作。我尝试在groupby中使用colnames(df[I]),但是因为colnames返回时带有引号,所以这种方法不起作用 有什么建议吗 如果您没有死心塌地地使用for循环,最简单的方法可能是使用dplyr::summary_all或dplyr::sumarse_at,具体取决于您的需要 df <- tibble( var1 = c(rep("a", 5), rep("b", 5)),

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


有什么建议吗

如果您没有死心塌地地使用for循环,最简单的方法可能是使用dplyr::summary_all或dplyr::sumarse_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
df%
分组依据(var1)%>%
总结所有(funs(平均值=平均值))
#一个tibble:2x3
var1 var2_平均值var3_平均值
1A-0.2715518-0.6146812
2 b 0.1502118-0.2061952
更新:

对不起,我之前误读了这个问题。您希望循环使用“groupby”变量,而不是响应变量

你可以用它来做。以下是一个例子:

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
df%#用!!
总结(平均值=平均值(var3))%>%
打印()
}
#一个tibble:2x2
var1平均值
1A-0.3451196
2b 0.4117763
#一个tibble:2x2
var2平均值
1c-0.2618434
2d0.1598305

如果您没有死心塌地地使用for循环,最简单的方法可能是使用dplyr::summary_all或dplyr::sumerse_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
df%
分组依据(var1)%>%
总结所有(funs(平均值=平均值))
#一个tibble:2x3
var1 var2_平均值var3_平均值
1A-0.2715518-0.6146812
2 b 0.1502118-0.2061952
更新:

对不起,我之前误读了这个问题。您希望循环使用“groupby”变量,而不是响应变量

你可以用它来做。以下是一个例子:

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
df%#用!!
总结(平均值=平均值(var3))%>%
打印()
}
#一个tibble:2x2
var1平均值
1A-0.3451196
2b 0.4117763
#一个tibble:2x2
var2平均值
1c-0.2618434
2d0.1598305

您能否使用
iris
mtcars
制作一个编码示例?听起来好像有更好的方法通过
dplyr
向我们展示您的数据和您的尝试。提问时使用此参考资料:您能否使用
iris
mtcars
制作一个编码示例?听起来好像有更好的方法通过
dplyr
向我们展示您的数据和您的尝试。提问时使用此参考资料:这不会在每一列中循环使用
group\u by
。@useR我明白你的意思。我看错了问题。这并没有在每一列中循环使用
group\u by
。@useR我明白你的意思。我误解了这个问题。