2016-11-17 4 views
0

複雑なXMLファイルをデータフレームに変換しています。このアプローチのR複雑なxmlをデータフレームに変換する

2つの問題:

それがヌルであるべき場所2の全てが複製され
  1. ノードの一つでより多くのデータポイントがある場合は、時々、このエラーを取得:「引数が異なる暗示を行数:198,240 "、同じ行にマップし直す必要があり、存在しない場合はnullにする必要があります。
  2. 2つの既存の列を3と等しく計算するにはどうすればよいですか?

これは、その簡易版である:

require(xml2) 

xml_data = " 
<top> 
    <line> 
     <one>1</one> 
    </line> 
    <line> 
     <one>1</one> 
     <two>2</two> 
    </line> 
    <line> 
     <one>1</one> 
    </line> 
</top> 
" 

data2 <- read_xml(file) 


df <- data.frame(
    #purchase 
    one=xml_text(xml_find_all(data2, ".//line/one")), 
    two=xml_text(xml_find_all(data2, ".//line/two")), 
    sum1 = one + two 
) 
+0

をあなたは 'line'を対象としており、各返されたノードを別々に処理します。それを行う方法のSO上の例があります。 – hrbrmstr

答えて

2

私は、実際の検索努力はprblyそうだったことに気づいたコメントを書いた後:

require(xml2) 
library(purrr) 
library(dplyr) 

xml_data = " 
<top> 
    <line> 
     <one>1</one> 
    </line> 
    <line> 
     <one>1</one> 
     <two>2</two> 
    </line> 
    <line> 
     <one>1</one> 
    </line> 
</top> 
" 

data2 <- read_xml(xml_data) 

xml_find_all(data2, ".//line") %>% 
    map_df(function(x) { 
    one <- xml_find_all(x, ".//one") %>% xml_text() %>% as.numeric() 
    two <- xml_find_all(x, ".//two") %>% xml_text() %>% as.numeric() 
    if (length(two) == 0) two <- NA_integer_ 
    data_frame(one, two, sum=sum(one, two, na.rm=TRUE)) 
    }) 
## # A tibble: 3 × 3 
##  one two sum 
## <dbl> <dbl> <dbl> 
## 1  1 NA  1 
## 2  1  2  3 
## 3  1 NA  1 
+0

華麗なありがとう! –

関連する問題