使用readHTMLTable从网站获取表时只读取一些列

时间:2016-07-22 20:56:04

标签: html r subset

我正在尝试从这个网站上阅读该表格。

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

问题是我只想要读取第一列(Event)和最后一列(Medal)。 这是我的代码和结果:

 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

如您所见,它会返回表格的所有列。我在R文档中读到,使用colClasses并声明Null值应该使R忽略该列,但它对我不起作用。我意识到一旦你有了R中的数据,就可以很容易地用所需的列创建一个新的数据框:

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

我真的想避免这个额外的步骤并找到一种方法,只有所需的数据进入R,原因是因为这个页面是需要读取数千页的代码的一部分多次运行时额外的步骤可能会非常耗时。

1 个答案:

答案 0 :(得分:0)

使用list而不是vector:

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