2016-07-22 13 views
0

Ich versuche, die Tabelle von dieser Website zu lesen.Nur einige Spalten lesen, wenn readHTMLTable verwendet wird, um Tabellen von einer Website abzurufen

http://www.databaseolympics.com/games/gamessport.htm?g=1&sp=ATH

Das Problem ist, ich will nur die erste Spalte (Ereignis) und die letzte Spalte (Medaille) gelesen werden. Dies ist mein Code und Ergebnis:

temp_URL<-'http://www.databaseolympics.com/games/gamessport.htm?g=1&sp=ATH' 
tab<-readHTMLTable(temp_URL, which=3,colClasses = c('factor',NULL,NULL,NULL,'factor')) 
head(tab) 

    Event   Athlete Country Result Medal 
1 100m Men  Tom Burke  USA  12.0 GOLD 
2   Fritz Hofmann  DEU 12.2 est. SILVER 
3    Francis Lane  USA  12.6 BRONZE 
4   Alajos Szokolyi  HUN 12.6 est. BRONZE 
5 400m Men  Tom Burke  USA  54.2 GOLD 
6   Herbert Jamison  USA  n/a SILVER 

Wie Sie sehen es alle Spalten der Tabelle zurückgibt. Ich habe in der R-Dokumentation gelesen, dass die Verwendung von colClasses und die Angabe eines Null-Wertes dazu führen sollte, dass R diese Spalte ignoriert, aber es funktioniert nicht für mich. Ich weiß, wenn Sie die Daten in R haben es sehr einfach ist, einfach einen neuen Datenrahmen mit den gewünschten Spalten zu erstellen:

tab<-data.frame(tab$Event,tab$Medal) 
    head(tab) 
     tab.Event tab.Medal 
    1 100m Men  GOLD 
    2    SILVER 
    3    BRONZE 
    4    BRONZE 
    5 400m Men  GOLD 
    6    SILVER 

Ich mochte wirklich diesen zusätzlichen Schritt zu vermeiden und eine Art und Weise, in der nur die gewünschten finden Daten kommen in R, der Grund dafür ist, dass diese Seite ein Teil eines Codes ist, der Tausende von Seiten lesen muss, und dieser zusätzliche Schritt könnte zeitaufwendig sein, wenn er mehrere Male ausgeführt wird.

Antwort

0

Verwenden Liste anstelle von Vektor:

temp_URL<-'http://www.databaseolympics.com/games/gamessport.htm?g=1&sp=ATH' 

tab<-readHTMLTable(temp_URL, which=3,colClasses = list("factor",NULL,NULL,NULL,"factor"),stringsAsFactors = FALSE) 

head(tab) 
       V1  V2 
     1 100m Men GOLD 
     2   SILVER 
     3   BRONZE 
     4   BRONZE 
     5 400m Men GOLD 
     6   SILVER 
+0

Es worked.Thanks – Lee