将 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])
我在使用 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])