rvest
野球の順位表に慣れようとしているときに、@Coryは親切にも、部門ごとに 1 つのテーブルがあるサイトを教えてくれました。(野球は2リーグ×各3ディビジョン=6テーブル)。
library("rvest"); library("xml2")
read_html("http://sports.yahoo.com/mlb/standings/") %>%
html_nodes(".yui3-tabview-content") %>%
html_nodes("table") %>% html_table -> standings
ただし、これらの表にはリーグとディビジョンの列は含まれていません。その情報は、セクションの見出し<h4>
と<h5>
表の上にあります。
read_html("http://sports.yahoo.com/mlb/standings/") %>%
html_nodes(".yui3-tabview-content") %>%
html_nodes("h4") %>% html_text -> leagues
leagues # [1] "American League" "National League"
read_html("http://sports.yahoo.com/mlb/standings/") %>%
html_nodes(".yui3-tabview-content") %>%
html_nodes("h5") %>% html_text -> divs
divs # [1] "East" "Central" "West" "East" "Central" "West"
リーグと部門を半手動で割り当てることができることを知っています。
for (i in 1:6){
standings[[i]]$League <- as.factor( leagues[ceiling(i/3)])
standings[[i]]$Division <- as.factor(divs[i])
}
standings <- do.call(rbind, standings) # desired output
<h4>
この構造が変わるとは思えないので、手動の割り当てで問題ありません...しかし、考えさせられました..各テーブルにandの最新の値を継承/ルックバックさせ、<h5>
列として保存する賢い方法はありますか?
TYVM