【问题标题】:R and readLines of webpage text网页文本的 R 和 readLines
【发布时间】:2014-11-26 19:11:31
【问题描述】:

我想从以下网站创建一个数据框:http://www.arrs.net/MaraList/ML_2014.htm

不幸的是,我不知道如何使用似乎是制表符分隔符并创建数据列。我在下面的代码采用并创建了多个字符串,但我无法确定如何将具有多个单词的名称分隔到单个列中,因为它显示在网站上。

library(XML)
url<-"http://www.arrs.net/MaraList/ML_2014.htm"
data<-readLines(url)
data<-sub("</FONT></b><FONT SIZE=\"2\" <FONT COLOR=\"#00000\" FACE=\"Courier New,           Courier\">","",data)
data<-sub("<B><FONT COLOR=\"#0066FF\" FACE=\"Arial\">","",data)
data<-read.table(textConnection(data),stringsAsFactors=FALSE)
data<-data[11:40000,1]

所以,不确定我拥有的任何当前代码能否让我到达那里。任何信息或链接到以前的帖子将不胜感激。

【问题讨论】:

  • 该数据似乎没有分隔,它似乎是固定宽度。使用read.fwf 可能会更好,但您必须自己确定分栏符。
  • 完全同意@MrFlick,您可以提取非标记行:mara &lt;- readLines(url); records &lt;- grep("&lt;", mara, invert=TRUE, value=TRUE); records &lt;- grep("^[A-Z]", records, value=TRUE)。我也将让您计算字符数:-)
  • 可以理解,感谢@MrFlick和hrbrmstr的帮助

标签: r readlines


【解决方案1】:

这是阅读此内容的一种方法(使用我维护的两个包和了不起的stacksplitshape 包)。你需要开发版的qdapTools

devtools::install_github("trinker/qdapTools")
library(qdapTools); library(qdapRegex); library(splitstackshape)
url<-"http://www.arrs.net/MaraList/ML_2014.htm"

m <- readLines(url)[-c(1:7, 2760:2767)]

## Split into lists by country    
x <- loc_split(m, unique(grep("<B><FONT", m)))

## Clean up country names
nms <- rm_angle(sapply(x, `[`, 1))

## remove html country name from data can convert to a data.frame
dat <- list2df(setNames(lapply(x, `[`, -1), nms), "dats", "Country")[, 2:1]

## Use hand parsing technique to locate widths      
## I added a # before each column in row one of data
## gregexpr tells us the location of the # characters
det <- "AAR  #26#Jan #King George Island           #      #27+25   #White Continent                        #4:03:30    #Steve Hibbs (USA)              #4:13:02    #Suzy Seeley (54,TX/USA) "
widths <- gregexpr("#", det)[[1]]

## replace those widths with # character as it is not any where else in data set
for (i in widths){
    substring(dat[["dats"]], i, i) <-  "#" 
}

## split columns on # character
out <- cSplit(dat, 2, sep="#")

out

【讨论】:

  • devtools("trinker/qdapTools") ?
  • 感谢@TylerRinker,不熟悉这些工具,所以我会看看。
  • @DirtyFilthyTerribleRaptor - 我没有太多时间,也有一段时间没有更新 devtools - 可能有一个更新添加了“devtools”功能,但我也没有看到你加载devtools 所以我不确定发生了什么。
猜你喜欢
  • 1970-01-01
  • 2020-06-05
  • 1970-01-01
  • 2018-10-26
  • 2011-12-18
  • 2019-01-18
  • 1970-01-01
  • 2018-08-11
  • 1970-01-01
相关资源
最近更新 更多