2017-09-16 7 views
0

Comment convertir le format suivant en boucle?Référencer une variable dynamique dans une boucle

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) 

Dans d'autres langues que je voudrais écrire quelque chose comme:

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

Avec un peu de recherche, j'obtenu aussi loin que ce qui suit, mais est resté coincé sur le bit moyenne(). Je me demande aussi si cela doit être aussi compliqué?

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

Une boucle for pourrait ne pas être le meilleur choix pour ce genre d'emplois. Vous pourriez être intéressé par ce poste: https://stackoverflow.com/questions/11562656/average-data-by-group – mt1022

+0

Pouvez-vous fournir un [exemple reproductible] (http://stackoverflow.com/questions/5963269/how -à-faire-un-grand-r-reproductible-exemple)? – jsb

Répondre

0

Comme déjà mentionné par @ MT1022, vous voudrez peut-être envisager pas en utilisant une boucle pour cela. L'exemple suivant utilise les fonctions group_by et summarise de dplyr pour obtenir la moyenne pour chaque groupe de gagnants.

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 

Pour plus d'informations voir les exemples summarisehttp://dplyr.tidyverse.org/reference/summarise.html