2010-07-09 29 views
4

我想解析R中的XML文件,以便分析數據。我試圖得到價格的均值和標準差。我也希望能夠在股價變化時獲得變化率。我曾嘗試進入手工數據但我有帶日期的結構問題(我曾嘗試以下:我該如何解析R中的XML文件並對數據進行基本的統計分析

z <- strptime ("HH:MM:SS.ms, "%H:%m:%S.%f") 

,但未能奏效)。我知道XML文件只有少量的數字,但它是一個可以自動化的過程,如果有的話,我需要哪些軟件包? (我是R新手)。任何幫助將非常感激。

謝謝, 安東尼。

<?xml version = "1.0"?> 
    <Company > 
    <shareprice> 
    <timeStamp> 12:00:00:01</timeStamp> 
    <Price> 25.02</Price> 
    </shareprice> 



    <shareprice> 
    <timeStamp> 12:00:00:02</timeStamp> 
    <Price> 15</Price> 
    </shareprice> 



    <shareprice> 
    <timeStamp> 12:00:00:025</timeStamp> 
    <Price> 15.02</Price> 
    </shareprice> 



    <shareprice> 
    <timeStamp> 12:00:00:031</timeStamp> 
    <Price> 18.25</Price> 
    </shareprice> 



    <shareprice> 
    <timeStamp> 12:00:00:039</timeStamp> 
    <Price> 18.54</Price> 
    </shareprice> 



    <shareprice> 
    <timeStamp> 12:00:00:050</timeStamp> 
    <Price> 16.52</Price> 
    </shareprice> 


    <shareprice> 
    <timeStamp> 12:00:01:01</timeStamp> 
    <Price> 17.50</Price> 
    </shareprice> 
</Company> 

回答

8

z <- strptime ("HH:MM:SS.ms, "%H:%m:%S.%f") 

你錯過了一個閉合"所以它是無效的語法。

接下來,數據是非標準的,因爲我們將使用一個點seconds.subseconds,即12:23:34.567來表示時間戳。毫秒可以這樣解析:

> ts <- "12:00:00.050" 
> strptime(ts, "%H:%M:%OS") 
[1] "2010-07-09 12:00:00 CDT" 
> 

所以你不僅需要首先從XML中取出它,還需要轉換字符串。否則,您可以解析字符串「手動」填充POSIXlt時間結構。

Postscriptum:忘了提,你需要啓用的子第二次印刷:

> options("digits.secs"=3)   # shows milliseconds (three digits) 
> strptime(ts, "%H:%M:%OS") 
[1] "2010-07-09 12:00:00.05 CDT" # suppresses trailing zero 
> 

Postscriptum 2:你也是幸運相對於您的文件感謝XML包:

> library(XML) 
> xmlToDataFrame("c:/Temp/foo.xml")  # save your data as c:/Temp/foo.xml 
     timeStamp Price 
1 12:00:00:01 25.02 
2 12:00:00:02  15 
3 12:00:00:025 15.02 
4 12:00:00:031 18.25 
5 12:00:00:039 18.54 
6 12:00:00:050 16.52 
7 12:00:01:01 17.50 
> 
+0

嗨德克,感謝您的快速回復。我按照你給的步驟添加了以下內容: 庫(XML) test.df < - xmlToDataFrame(「c:/Users/user/Desktop/shares.xml」) attach(test.df) mean ) 我得到以下幾點: [1] NA 警告消息: 在mean.default(價格):參數不是數字或邏輯:返回NA 是我丟失的還有其他的命令? – 2010-07-09 21:27:46

+0

也許嘗試的意思(as.numeric(Price))。 – Greg 2010-07-09 21:29:17

+0

感謝格雷格,這工作。 – 2010-07-09 21:50:45

4

對於更復雜的XML數據,使用XML包可能很有用。

library(XML) 

check <- xmlInternalTreeParse("/PathToXMLFile/checkXML.xml") 
xpathSApply(check, "//timeStamp", xmlValue) 
## [1] " 12:00:00:01" " 12:00:00:02" " 12:00:00:025" " 12:00:00:031" 
## [5] " 12:00:00:039" " 12:00:00:050" " 12:00:01:01" 
+1

我最近的更新還通過'xmlToDataFrame()'函數使用'XML'。 – 2010-07-09 23:35:22