2016-11-17 110 views
0

我正在將複雜的XML文件轉換爲數據框。R將複雜的XML文件轉換爲數據框

兩個問題的方法:

  1. 全部兩個被複制,它應該是空
  2. 如果在節點的一個或多個數據點,那麼有時會得到這個錯誤:「參數意味着,不同的行數:198,240「,它應該映射回同一行,如果它不存在,應該爲空。
  3. 如何計算兩個現有的列等於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'和然後分別處理每個返回的節點。有如何做到這一點的例子。 – 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

非常感謝你! –