2016-08-31 5 views
-3

最後の4時間は、xmlファイルの一部の値にRを使ってアクセスしようとしましたが、今は新しいアイデアのためにすべて空です。R:XMLからの値のアクセス/抽出に問題があります

これはXMLファイルです:私は、すべての数量値を取得しようとしているhttp://opcom.ro/order_book/OBK-30XROOPCOM-----C-2016-08-19.xml

// OrderTimeSeries // SupplyCurve // //期間間隔//ポイント、最初のエントリが0になるように、次の0と23のようになります。

私はのようなものを試してみました:XMLは

<Qty>"0.00000000000"<Qty/> 

のように書かれていた場合、私はこれが仕事だと思う。しかし、私はそれが<の内側に書かれている時に値を抽出する方法を知らない

library(XML)  

doc <- xmlParse("http://opcom.ro/order_book/OBK-30XROOPCOM-----C-2016-08-19.xml") 

qty <- unlist(xpathApply(doc,"//OrderTimeSeries//SupplyCurve//Period//Interval//Point",xmlvalue)) 

> v = 0,00000000000である。

+0

:http://stackoverflow.com/help/mcveだけにリンクしていませんXMLドキュメントどんな出力でもうまく動作しているのか、何が動作していないのかを出力してみれば、より良いヘルプが得られます。それを作成する過程で、あなた自身の問題を解決するかもしれませんが、もしそうでなければ、より豊かな情報があれば、我々は助けることができます。 –

+0

_ "私は" _に慣れていたようには見えません。ノード、属性、値があります。 Kindaは私が今まで見たことのある他のすべてのXMLファイルのように見えます。 – hrbrmstr

+0

申し訳ありませんが、私はstackoverflowとXML形式の両方に新しいです。私は説明にもう少しテキストを追加しようとしました。 :-) – KarlJensen

答えて

0

<Interval>「レコード」のそれぞれにノード<Pos="##"/>があります。私はそれがそれぞれの時系列を別々に識別するのに重要なデータだと思っています。

あなたは簡単な方法で問題を攻撃することができ

Point のサブ値を抽出Point

  • を見つける

    • 各区間
      • エキスPos
      • を見つけます

    と道に沿ってdata.frameを構築:あなたはMCVEと呼ばれるものを提供する必要がありますStackOverflowの上で

    library(xml2) 
    library(purrr) 
    
    doc <- read_xml("http://opcom.ro/order_book/OBK-30XROOPCOM-----C-2016-08-19.xml") 
    
    names_and_values <- function(x) { 
        names <- xml_name(xml_find_all(x, ".//*")) 
        vals <- as.numeric(xml_attr(xml_find_all(x, ".//*"), "v")) 
        df <- rbind.data.frame(vals) 
        setNames(df, names) 
    } 
    
    pos_and_points <- function(x) { 
        pos <- as.numeric(xml_attr(xml_find_first(x, ".//Pos"), "v")) 
        xml_find_all(x, ".//Point") %>% 
        map_df(names_and_values) -> df 
        df$pos <- pos 
        df 
    } 
    
    xml_find_all(doc, ".//OrderTimeSeries/SupplyCurve/Period/Interval") %>% 
        map_df(pos_and_points) -> df 
    
    dplyr::glimpse(df) 
    ## Observations: 5,316 
    ## Variables: 4 
    ## $ Qty   <dbl> 0.0, 0.0, 23.0, 23.0, 26.5, 26.5, 56.8, 56.8, 150.5, 150.5, 171.5, 171.... 
    ## $ PriceAmount <dbl> -5.000000e+02, -2.500000e+01, -2.500000e+01, -2.235536e+01, -2.235536e+... 
    ## $ SeqNr  <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ... 
    ## $ pos   <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,... 
    
+0

ありがとうございました。それは大きな助けとなりました。私はあなたの主なアイデアに簡単に従うことができ、あなたのコードは非常に読みやすいです。以前は 'purr'の' map_df'については聞いていませんでしたが、今からそのパッケージを使用します。 – KarlJensen

関連する問題