【问题标题】:R group_by different column names in a loopR group_by 循环中的不同列名
【发布时间】:2018-08-01 16:49:21
【问题描述】:
student <- data.frame(ID = c(11, 12, 13),
                      Name = c("Devin", "Edward", "Wenli"),
                      Gender = c("M", "M", "F"),
                      Birthdate = c("1984-12-29", "1983-5-6", "1986-8-8"))

selection <- c("Name", "Gender", "Birthdate")

现在我想写一个循环

library(dplyr)
for(choice in selection){
   df = group_by(choice)
   print(df)
}

但它不起作用。我该怎么做?

【问题讨论】:

  • 您必须首先在 group_by 函数中评估“选择”。尝试替换为:eval(choice)
  • 为什么不只是df &lt;- df %&gt;% group_by(Name, Gender, Birthdate)

标签: r dplyr


【解决方案1】:

也许,这就是你所追求的?

library(dplyr)
for(choice in selection){
  student %>% group_by(!!choice ) %>% print()
}
# A tibble: 3 x 5
# Groups:   "Name" [1]
     ID Name   Gender Birthdate  `"Name"`
  <dbl> <fct>  <fct>  <fct>      <chr>   
1  11.0 Devin  M      1984-12-29 Name    
2  12.0 Edward M      1983-5-6   Name    
3  13.0 Wenli  F      1986-8-8   Name    
# A tibble: 3 x 5
# Groups:   "Gender" [1]
     ID Name   Gender Birthdate  `"Gender"`
  <dbl> <fct>  <fct>  <fct>      <chr>     
1  11.0 Devin  M      1984-12-29 Gender    
2  12.0 Edward M      1983-5-6   Gender    
3  13.0 Wenli  F      1986-8-8   Gender    
# A tibble: 3 x 5
# Groups:   "Birthdate" [1]
     ID Name   Gender Birthdate  `"Birthdate"`
  <dbl> <fct>  <fct>  <fct>      <chr>        
1  11.0 Devin  M      1984-12-29 Birthdate    
2  12.0 Edward M      1983-5-6   Birthdate    
3  13.0 Wenli  F      1986-8-8   Birthdate

请注意,OP 只请求group_by() 而不是summarize()

!! 运算符的解释

Programming with dplyr 上的小插曲说:

在 dplyr(和一般的 tidyeval 中)你使用 !!说你想要 取消引用输入,以便对其进行评估,而不是引用。

【讨论】:

  • @Magica,我已经更新了我的答案,希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多