2016-05-13 21 views
0

Rをデータフレームに使用してXMLノードを読み込む際に問題が発生しています。私はXMLデータを読むのが初めてです。 )は、いくつかの観測を除外し、いくつかの行を区切るされていません(XML文字列をデータフレームに変換するR

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のものをどのように扱うかについていくつかの洞察を得ることができます。

+1

怪しいという名前の 'XML'パッケージ... – lmo

+0

は、ページが***の痛みされていることがあります。データセットはマークダウンでラップされたので、実際に積み重なってしまった。再構築や500行の読み込みを行わずに正しく読む方法はありません。 3セットあるようです500 –

+0

はい、私はXMLパッケージについて知っており、それを使用しており、rvestパッケージのレイアウトが好きです。 私はそれを読んでいる行を管理し、 "\ n"デリミタでそれをsttsplitしました。しかし、あなたが見下ろすと、250行が "\ n"で新しい行に分けられたように見えます。 私はそれをすべて読んで、いくつかの変換を行いました。私はちょうど1500行すべてを別々に読むのに苦労していて、助けをいくつか使うことができます。 – KenDazzo

答えて

0

Iは、ベクター中にpre/codeノードを分割した後、コメントが

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

これらは固定幅のフィールドであるので、(最初の二つのための最後のread.fwfを使用する提案のようにテーブルの3つの部分を読みましたテーブルには、余分なスペースを持っていない)

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]) 
+0

大きな助けをいただきありがとうございますクリスS.素晴らしい働きました! – KenDazzo

関連する問題