我们想知道2014年1月R-help列表中最常见的10张海报的情况,我使用了getURL从ETHZ安全网站检索数据。
library("RCurl") library("XML") jan14 <- getURL("https://stat.ethz.ch/pipermail/r-help/2009-January/date.html", ssl.verifypeer = FALSE)
1)how can I parse jan14 file using htmltreeparse().
2)how can I use the regular expressions to pull out the author lines and delete unwanted characters in the lines.
答案 0 :(得分:4)
或者你可以通过rvest
(最终使用RCurl
)和CSS选择器以更易读的方式做到这一点:
library(rvest)
jan14 <- html("https://stat.ethz.ch/pipermail/r-help/2009-January/date.html")
authors <- jan14 %>%
html_nodes("li>i") %>% # CSS selector for <i> after <li>
html_text() %>% # get the text
gsub("\\n", "", .) # remove the newline for each author
tail(sort(table(authors)))
## authors
## Wacek Kusnierczyk jim holtman Duncan Murdoch Prof Brian Ripley
## 55 80 84 84
## David Winsemius Gabor Grothendieck
## 93 116
而且,我们甚至可以添加一些dplyr
和ggplot
作为衡量标准:
library(dplyr)
library(ggplot2)
dat <- data.frame(table(authors)) %>% arrange(-Freq)
gg <- ggplot(dat[1:25,], aes(x=reorder(authors, Freq), y=Freq))
gg <- gg + geom_bar(stat="identity")
gg <- gg + scale_x_discrete(expand=c(0,0))
gg <- gg + scale_y_continuous(expand=c(0,0))
gg <- gg + labs(x=NULL, y="# Posts", title="Top 25 Posters to R-help (Jan 2009)")
gg <- gg + coord_flip()
gg <- gg + theme_bw()
gg <- gg + theme(panel.grid=element_blank())
gg <- gg + theme(panel.border=element_blank())
gg
答案 1 :(得分:2)
检索文件。我们必须使用getURL()
,因为架构是https:,否则我们可以直接使用doc <- htmlParse(url)
。
url <- "https://stat.ethz.ch/pipermail/r-help/2009-January/date.html"
jan14 <- getURL(url, ssl.verifypeer = FALSE)
htmlParse()
解析我们刚检索到的文本。它与htmlTreeParse()
相同,但更容易输入。
doc <- htmlParse(jan14, asText=TRUE)
我们不需要正则表达式来解析文本文件;这将是容易出错和困难的。相反,我们使用XPath来标识列表中斜体项的文本值;这是作者姓名出现在html中的地方。
who <- sapply(doc["//li/i/text()"], xmlValue)
who
是贡献者名称的字符向量;唯一的&#39;不需要的&#39;字符是每个元素末尾的空格字符(包括新行)。匹配字符向量末尾的一个或多个空格字符的正则表达式为[[:space:]]+$
;我们可以使用sub()
来替换每个匹配项(""
)。 table()
函数创建一个表,计算每个作者贡献的次数。 sort()
获取此结果,并从最少到最频繁的贡献者订购这些结果。 tail()
返回最后一个(默认为6个,我们指定10个)条目。
tail(sort(table(sub("[[:space:]]+$", "", who))), 10)
结果是
> tail(sort(table(sub("[[:space:]]+$", "", who))), 10)
Greg Snow Henrique Dallazuanna hadley wickham
35 36 40
Marc Schwartz Wacek Kusnierczyk jim holtman
48 55 80
Duncan Murdoch Prof Brian Ripley David Winsemius
84 84 93
Gabor Grothendieck
116