2016-09-03 7 views
2

Formule 1のデータを分析しようとしています。 Wikipediaには、私が望むデータが入ったテーブルがあります。以下のコードでデータをRにインポートしています。readHTMLTableが私に必要な情報を提供していません

library(XML) 
library(RCurl) 

url <- "https://en.wikipedia.org/wiki/List_of_Formula_One_drivers" 
tabs <- getURL(url) 
tabs <- readHTMLTable(tabs, stringsAsFactors=FALSE) 
pilots <- tabs[[3]] 
pilots <- pilots[-dim(pilots)[1], ] 

head(pilots[, 1]) 
[1] "Abate, CarloCarlo Abate" 
[2] "Abecassis, GeorgeGeorge Abecassis" 
[3] "Acheson, KennyKenny Acheson" 
[4] "Adamich, Andrea deAndrea de Adamich" 
[5] "Adams, PhilippePhilippe Adams" 
[6] "Ader, WaltWalt Ader" 

ただし、パイロット名は奇妙です。彼らがどのようにしているか注目しましょしかし、それは私がこの問題に対処することができます正規表現を書いたりしてソートキー値を無視する機能readHTMLTableの引数を見つけることができないのですそうです

head(pilots[, 1]) 
[1] "Carlo Abate" 
[2] "George Abecassis" 
[3] "Kenny Acheson" 
[4] "Andrea de Adamich" 
[5] "Philippe Adams" 
[6] "Walt Ader" 

:私は彼らがこのようになりたいですテーブル私は興味があります。問題を解決するにはどうしたらいいですか?

+0

「readHTMLTable」に「elFun」という引数を付けて使用します。 – jdharrison

答えて

2

readHTMLTableを特注のelFun引数で使用してください。

library(XML) 
library(RCurl) 

url <- "https://en.wikipedia.org/wiki/List_of_Formula_One_drivers" 
tabs <- getURL(url) 
myFun <- function(x){ 
    if(length(y <- getNodeSet(x, ".//a")) > 0){ 
    # return data.frame 
    title <- xpathSApply(x, ".//a", fun = xmlGetAttr, name = "title") 
    href <- xpathSApply(x, ".//a", fun = xmlGetAttr, name = "href") 
    value <- xpathSApply(x, ".//a", fun = xmlValue) 
    return(paste(value, collapse = ",")) 
    } 
    xmlValue(x, encoding = "UTF-8") 
} 
tabs <- readHTMLTable(tabs, elFun = myFun, stringsAsFactors=FALSE) 
pilots <- tabs[[3]] 
pilots <- pilots[-dim(pilots)[1], ] 

> head(pilots[, 1]) 
[1] "Carlo Abate"  "George Abecassis" "Kenny Acheson"  "Andrea de Adamich" 
[5] "Philippe Adams" "Walt Ader" 

> pilots[1,] 
     Name Country Seasons Championships Entries Starts Poles Wins Podiums Fastest laps Points[note] 
1 Carlo Abate Italy 1962,1963    0  2  0  0 0  0   0   0 
+0

その列の値の問題はどうですか?他の列は正常に読み込まれますが、これらの列は読み込まれません。 – user20650

+2

'readHTMLTable'は、' xmlValue'関数を見つけた 'td'ノードに適用します。この結果、 'td'ノードに子があるときに値が連結されます。デフォルトでは 'elFun = xmlValue'です。 – jdharrison

関連する問題