[英]Convert xml format to data frame in r
我有一個水族館監控系統,它以 XML 格式記錄數據,我在本地檢索這些數據。 這是結構的示例;
<datalog>
<record>
<date>20210301 00:00</date>
<probe>
<name>Tank1Temp</name>
<type>Temperature</type>
<value>10.4</value>
</probe>
<probe>
<name>Tank1Sal</name>
<type>Salinity</type>
<value>28.0</value>
</probe>
<probe>
<name>Tank1pH</name>
<type>pH</type>
<value>8.0</value>
</probe>
</record>
<record>
<date>20210301 00:01</date>
<probe>
<name>Tank1Temp</name>
<type>Temperature</type>
<value>10.5</value>
</probe>
<probe>
<name>Tank1Sal</name>
<type>Salinity</type>
<value>28.1</value>
</probe>
<probe>
<name>Tank1pH</name>
<type>pH</type>
<value>8.0</value>
</probe>
</record>
</datalog>
這是一個非常簡化的示例,記錄每分鍾記錄 24 小時,因此該塊每天重復 1440 次。 與上面的三個示例相比,記錄的每條記錄的探測次數也多得多。
我想把它變成一個包含“日期”、“名稱”、“類型”、“值”列的數據框。 我在 web 上遇到了類似的問題,但沒有一個解決方案適合我。 我認為這是因為探針都嵌套在日期中,並且示例更“簡單”,並且沒有解釋如何處理嵌套結構。
到目前為止,我可以讓 R 從系統中讀取數據(它連接到只能在本地訪問的路由器)但是一旦在 R 中我迷路了。 我嘗試使用以下代碼;
dataframe <- xmlToDataFrame(getNodeSet(data.20210225, c("//record/date", "//record/probe")))
這會產生一個看起來像的數據框;
文本 | 姓名 | 類型 | 價值 |
---|---|---|---|
20210301 00:00 | 不適用 | 不適用 | 不適用 |
不適用 | Tank1Temp | 溫度 | 10.4 |
不適用 | Tank1Sal | 鹽度 | 28.0 |
不適用 | Tank1pH | 酸鹼度 | 8.0 |
20210301 00:01 | 不適用 | 不適用 | 不適用 |
不適用 | Tank1Temp | 溫度 | 10.5 |
不適用 | Tank1Sal | 鹽度 | 28.1 |
不適用 | Tank1pH | 酸鹼度 | 8.0 |
這在保存數據方面是有效的,但由於所有的 NA,它對於分析不是很有用。
任何幫助是極大的贊賞。
如何將此 XML 變成數據框? 還是讓數據框對我的分析更友好?
考慮通過使用xpathApply
構建單個<record>
級別數據幀的列表來擴展您的數據幀處理,以便在最后進行最終的rbind
編譯:
recds <- xpathApply(data.20210225, "//record", function(x) {
# ADD CLEANED NEW date COLUMN
df <- within(xmlToDataFrame(x), { date <- text[1] })
# RE-ORDER/SUBSET COLS, DROP FIRST ROW, RESET ROWNAMES
data.frame(df[-1, c("date", "name", "type", "value")], row.names=NULL)
})
final_df <- do.call(rbind, recds)
final_df
# date name type value
# 1 20210301 00:00 Tank1Temp Temperature 10.4
# 2 20210301 00:00 Tank1Sal Salinity 28.0
# 3 20210301 00:00 Tank1pH pH 8.0
# 4 20210301 00:01 Tank1Temp Temperature 10.5
# 5 20210301 00:01 Tank1Sal Salinity 28.1
# 6 20210301 00:01 Tank1pH pH 8.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.