readHTMLTable没有给我我想要的信息

时间:2016-09-03 16:21:27

标签: regex r

我正在尝试分析一些Formule 1数据。维基百科有一个包含我想要的数据的表。我使用以下代码将数据导入R:

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"

然而,飞行员名字很奇怪。注意它们是怎样的。我希望他们是这样的:

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

但是,似乎我无法编写可以处理此问题的正则表达式,或者找不到函数readHTMLTable的参数,忽略了我感兴趣的表中的sortkey值。我怎样才能解决我的问题?

1 个答案:

答案 0 :(得分: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