将 XML 字符串转换为 R 中的数据帧

Converting XML string to dataframe in R

我在使用 R 将 XML 节点读取到数据框中时遇到问题。我刚开始阅读 XML 数据。

这是我设法得到的:

require(dplyr)
require(rvest)
url <- "http://rstudio-pubs-static.s3.amazonaws.com/177866_49f6965521224dd883df5f20f9c32db3.html"
x <- read_html(url) %>% 
  html_node("code") %>%
  html_text() 

x1 <- gsub("##", "", x)
df <- read.table(text = x1, fill = TRUE, sep = "\n", header=TRUE, allowEscapes = TRUE)`

但是,read.table() 似乎遗漏了一些观察结果并且没有分隔某些行。

我只是将 XML 文本放入一个简单的数据框中。希望我能对如何更好地处理这些 XML 问题有所了解。

我将 pre/code 节点拆分为一个向量,然后像建议的评论一样阅读 table 的 3 个部分

x1 <- strsplit(x, "\n## *")[[1]]

这些是固定宽度的字段,所以前两个使用 read.fwf(最后一个 table 没有任何额外的空格)

length(x1)
[1] 1503

x1[2]
"1    Espresso Leggero         6        2.54           0            1"

zz <- textConnection(x1[2:501])
df1 <- read.fwf(zz, widths=c(3, 18, 10, 12, 12, 13))
close(zz)
names(df1) <-  c("Id", strsplit(x1[1], " +")[[1]][-1] )
head(df1)
  Id             Flavor Intensity WaterVolume CreamVolume SugarPackets
1  1   Espresso Leggero         6        2.54           0            1
2  2          Ristretto         9        0.85           2            0
3  3          Ristretto         9        0.85           1            3
4  4        Lungo Forte         4        1.35           2            0
5  5      Lungo Leggero         2        0.85           1            1
6  6      Lungo Leggero         2        0.85           2            4

zz <- textConnection(x1[503:1002])
df2 <- read.fwf(zz, widths=c(3, 10, 10, 13, 10, 11, 13) )
close(zz)
names(df2) <- c("Id", strsplit(x1[502], " +")[[1]])

df3 <- read.table(text = x1[1004:1503])
names(df3) <- c("Id", strsplit(x1[1003], " +")[[1]])

coffee <- cbind(df1, df2[,-1], df3[,-1])