2017-09-16 86 views
0

如何將以下格式轉換爲循環?在循環中引用動態變量

alphateam_df <- dplyr::filter(data, grepl("alphateam", Winners)) 
alphateam_mean <- mean(alphateam_df$growth) 
betateam_df <- dplyr::filter(data, grepl("betateam", Winners)) 
betateam_mean <- mean(betateam_df$growth) 

在其他語言中我會寫這樣的:

for (team in c("alphateam","betateam")) { 
    {team}_df <- dplyr::filter(data, grepl({team}, Winners)) 
    {team}_mean <- mean({team}_df$growth) 
} 

帶着幾分搜索我的得到儘可能以下,但就死在均值()位。也想知道它是否需要這麼複雜?

for (team in c("alphateam", "betateam")) { 
    assign(paste(team, "_df", sep = ''), dplyr::filter(full, grepl(team, Winners))) 
    assign(paste(team, "_mean", sep = ''), mean(...) 
} 
+2

一個for循環可能不適合這樣的職位的最佳選擇。你可能會對這篇文章感興趣:https://stackoverflow.com/questions/11562656/average-data-by-group – mt1022

+0

你能提供一個[可重現的例子](http://stackoverflow.com/questions/5963269/how -to-化妝一個偉大-R-重複性,例如)? – jsb

回答

0

正如@ mt1022已經提到的,你可能想使用一個for循環這一考慮。以下示例使用dplyr中的group_bysummarise函數來獲得每組獲勝者的平均值。

suppressPackageStartupMessages(library(dplyr)) 

# example data 
df <- tibble(Winners = c("alphateam", "betateam", "alphateam", "alphateam", 
         "betateam", "betateam"), 
      growth = c(4, 7, 2, 12, 7, 10)) 

# mean for each Winners group 
df %>% 
    group_by(Winners) %>% 
    summarise(mean_growth = mean(growth)) 
#> # A tibble: 2 x 2 
#>  Winners mean_growth 
#>  <chr>  <dbl> 
#> 1 alphateam   6 
#> 2 betateam   8 

欲瞭解更多信息請參閱summarise例子http://dplyr.tidyverse.org/reference/summarise.html