2016-02-01 3 views
0

Je dois parcourir certaines données comportant deux variables: la saison et l'école. Si je détiens la variable école fixe (ci-dessous), je peux l'obtenir en boucle pendant toute la saison je précise:Utilisation d'une variable chaîne dans une double boucle dans R

library(XML) 

# parameters 
first_season <- 2014 
last_season <- 2015 

# seasons 
num_seasons <- as.numeric(last_season - first_season + 1) 
seasons <- seq(first_season, last_season, by=1) 

# defense 
defense <- data.frame() 
for (i in 1:num_seasons) { 
    url <- paste("http://www.sports-reference.com/cfb/schools/wisconsin/", seasons[i], ".html", sep = "") 
    df <- readHTMLTable(url,which=4, header=FALSE, stringsAsFactors=F) 
    df$season = seasons[i] 
    defense <- rbind(defense, df) 
    rm(df) 
    print(seasons[i]) 
} 

Mon problème est que je ne sais pas comment ajouter a) un paramètre supplémentaire à boucle et b) comment gérer le paramètre s'il n'est pas numérique.

Ma liste des écoles est dans une table/colonne colleges$school^

> head(colleges$school) 
[1] "Air Force"   "Akron"    
[3] "Alabama"    "Alabama-Birmingham" 
[5] "Alameda Coast Guard" "Alcorn State" 

^l'URL sera toujours lower(colleges$school) avec - remplaçant mais je peux contrôler pour cela.

Merci d'avance!

Répondre

0

Je ne suis pas certain de comprendre (b). Voulez-vous dire passer dans le paramètre (par exemple, école [j]), ou stocker les données (par exemple saisons [i]).

Tout ce que j'ai fait, c'était ajouter une boucle externe et itérer sur les collèges. Je stocke les résultats dans une nouvelle DF appelée school_defense. Je n'ai pas votre liste d'école donc je ne peux pas la tester.

library(XML) 

# parameters 
first_season <- 2014 
last_season <- 2015 

# seasons 
num_seasons <- as.numeric(last_season - first_season + 1) 
seasons <- seq(first_season, last_season, by=1) 

# schools 
schools <- unique(lower(colleges$school)) 

# defense 
school_defense <- data.frame() 
for(j in 1:length(schools)){ 
    defense <- data.frame() 
    for (i in 1:num_seasons) { 
     url <- paste("http://www.sports-reference.com/cfb/schools/", school[j],"/", seasons[i], ".html", sep = "") 
     df <- readHTMLTable(url,which=4, header=FALSE, stringsAsFactors=F) 
     df$season = seasons[i] 
     defense <- rbind(defense, df) 
     rm(df) 
     print(seasons[i]) 
    } 
defense <- data.frame(school = rep(school[j], nrow(defense)), defense) 
school_defense <- data.frame(school_defense, defense) 
} 
+0

I a remplacé la seule ligne 'n de schools' avec' # écoles collèges <- as.data.frame (c ("Arizona State", "Michigan", "Wisconsin")) noms (collèges) <- "école" écoles <- unique (tolower (collèges $ école)) écoles <- gsub ("", "-", écoles) 'et j'obtiens l'erreur' Error in paste ("http: // www.sports-reference.com/cfb/schools/ ", school [j],: objet 'école' non trouvé' –

+0

@FrankB simple typo: vous avez nommé la variable' schools' alors ajoutez simplement 's schools [j ] ' – wici

+0

Ya, j'ai remarqué que par la suite, j'ai changé chaque instance de' schools' à 'school' sous la ligne' # schools' et j'ai l'erreur: 'Er ror dans data.frame (school_defense, defense): arguments impliquent un nombre différent de lignes: 0, 73' –