r - 将数据从 Atom 兼容的数据源导入到 R

标签 r import rcurl

有人有从 Atom 兼容的数据源将数据导入到 R 的经验吗?我已经下载了一个“.atomsvc​​”文件并在记事本中打开了它的内容并得到以下内容:

<?xml version="1.0" encoding="utf-8" standalone="yes"?><service xmlns:atom="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns="http://www.w3.org/2007/app"><workspace><atom:title>OperationallyAvailableCapacity</atom:title><collection href="http://10.101.111.234/ReportServer?%2FInfoPost%2FOperationallyAvailableCapacity&amp;AssetNbr=51&amp;beg_date=05%2F03%2F2013%2000%3A00%3A00&amp;LocationNbr=%25&amp;LocationProp=%25&amp;LocationName=%25&amp;DirOfLow=%25&amp;rs%3AParameterLanguage=&amp;rs%3ACommand=Render&amp;rs%3AFormat=ATOM&amp;rc%3ADataFeed=xAx0x13"><atom:title>table1</atom:title></collection></workspace></service>

我猜想导入这个我可能必须使用 RCurl,但由于我对该包的经验有限,我希望有人能给我指出正确的方向。

如有任何帮助,我们将不胜感激。

最佳答案

Feed 只是为您提供 XML 格式的信息,可以使用 XML 包进行解析。

library(XML)
url <- 'http://housesofstones.com/blog/feed/atom/'

# Download and parse the data
xml_data <- xmlParse(url)

# Convert the xml structure to a list so you can work with it in R
xml_list <- xmlToList(xml_data)

str(head(xml_list))

List of 6
$ title   :List of 2
..$ text  : chr "Houses of Stones"
..$ .attrs: Named chr "text"
.. ..- attr(*, "names")= chr "type"
$ subtitle:List of 2
..$ text  : chr "\"Science is facts; just as houses are made of stones, so is science made of facts; but a pile of stones is not a house and a c"| __truncated__
..$ .attrs: Named chr "text"
.. ..- attr(*, "names")= chr "type"
$ updated : chr "2013-05-16T12:16:49Z"
$ link    : Named chr [1:3] "alternate" "text/html" "http://housesofstones.com/blog"
..- attr(*, "names")= chr [1:3] "rel" "type" "href"
$ id      : chr "http://housesofstones.com/blog/feed/atom/"
$ link    : Named chr [1:3] "self" "application/atom+xml" "http://housesofstones.com/blog/feed/atom/"
..- attr(*, "names")= chr [1:3] "rel" "type" "href"

或者,使用您的示例数据:

example_data <- '<?xml version="1.0" encoding="utf-8" standalone="yes"?><service xmlns:atom="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns="http://www.w3.org/2007/app"><workspace><atom:title>OperationallyAvailableCapacity</atom:title><collection href="http://10.101.111.234/ReportServer?%2FInfoPost%2FOperationallyAvailableCapacity&amp;AssetNbr=51&amp;beg_date=05%2F03%2F2013%2000%3A00%3A00&amp;LocationNbr=%25&amp;LocationProp=%25&amp;LocationName=%25&amp;DirOfLow=%25&amp;rs%3AParameterLanguage=&amp;rs%3ACommand=Render&amp;rs%3AFormat=ATOM&amp;rc%3ADataFeed=xAx0x13"><atom:title>table1</atom:title></collection></workspace></service>'

xml_data <- xmlParse(example_data)

# Convert the xml structure to a list so you can work with it in R
xml_list <- xmlToList(xml_data)

str(xml_list)

List of 1
$ workspace:List of 2
..$ title     : chr "OperationallyAvailableCapacity"
..$ collection:List of 2
.. ..$ title : chr "table1"
.. ..$ .attrs: Named chr "http://10.101.111.234/ReportServer?%2FInfoPost%2FOperationallyAvailableCapacity&AssetNbr=51&beg_date=05%2F03%2F2013%2000%3A00%3"| __truncated__
.. .. ..- attr(*, "names")= chr "href"

编辑

经过仔细检查,您的特定示例数据似乎由于某种原因在单个节点中保留了大量信息,并以 URL 进行编码。如果您想要这些数据,则需要将其取出。

首先,调用该单个节点,并对 URL 进行解码,以便更容易解析:

xml_content <- URLdecode(xml_list$workspace$collection$.attrs)

各个参数之间用“&”分隔,因此您可以通过该字符分割字符串。

xml_content <- unlist(strsplit(xml_content, "&"))

每个新字符串都包含参数名称和值,并用等号分隔。有多种方法可以将这些信息分开。也许最简单的方法是使用 plyr 包中的 str_split_fixed 函数:

require(stringr)

str_split_fixed(xml_content, "=", 2)

[,1]                                                                          [,2]                 
[1,] "http://10.101.111.234/ReportServer?/InfoPost/OperationallyAvailableCapacity" ""                   
[2,] "AssetNbr"                                                                    "51"                 
[3,] "beg_date"                                                                    "05/03/2013 00:00:00"
[4,] "LocationNbr"                                                                 "%"                  
[5,] "LocationProp"                                                                "%"                  
[6,] "LocationName"                                                                "%"                  
[7,] "DirOfLow"                                                                    "%"                  
[8,] "rs:ParameterLanguage"                                                        ""                   
[9,] "rs:Command"                                                                  "Render"             
[10,] "rs:Format"                                                                   "ATOM"               
[11,] "rc:DataFeed"                                                                 "xAx0x13"       

关于r - 将数据从 Atom 兼容的数据源导入到 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16991338/

相关文章:

python - 'from pylons import config' 和 'import pylons.config' 之间的区别

python - 使用 R SOAP (SSOAP) 检索数据/抓取

r - 使用 RCurl 在 R 向量中获取网站目录列表

r - 将所有列名称传递给 mutate() 内的 pmap()

r - 将一个 dplyr "do"函数的结果传递给另一个函数

python - 如何检查文件是否从Python中的另一个文件导入

node.js - 如何使用 NodeJS 13 和 Typescript 3.8 导入 esm 模块?

javascript - 如何使用 R 下载半损坏的 javascript asp 函数后面的文件

r - 在不截断和调整全局设置的情况下将整个字符串打印到控制台

r - 如何使 geom_jitter() 在 R 中分组 ggplot2 条形图中的各个条形中显示点?