2016-09-03 2 views
2

Я пытаюсь проанализировать некоторые данные Formule 1. В Википедии есть таблица с данными, которые я хочу. Я импортирую данные в 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" 

Однако имена пилотов странные. Обратите внимание, как они. Я хотел бы, чтобы они были так:

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

Тем не менее, кажется, я не могу написать регулярное выражение, которое может справиться с этой проблемой или найти аргумент для функции readHTMLTable, которая игнорирует значение SortKey в Мне интересно. Как я могу решить свою проблему?

+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

Смежные вопросы