R語言處理XML文件
XML是分享的文件格式在萬維網,內聯網中的數據,和其他地方使用標準ASCII文本的文件格式。它代表著可擴展標記語言(XML)。類似於 HTML 包含標記標簽。但不同於HTML標記標簽描述了頁麵的結構,xml標記標簽中包含自己的文件中的數據含義。
可以通過使用R中的“XML”包來讀取XML文件。可以用下麵的命令來安裝該軟件包。
install.packages("XML")
輸入數據
通過下麵的數據複製到記事本等文本編輯器創建一個XML文件。保存為一個帶有 .xml 擴展名的文件,並選擇文件類型為所有文件(*.*)。
<RECORDS> <EMPLOYEE> <ID>1</ID> <NAME>Rick</NAME> <SALARY>623.3</SALARY> <STARTDATE>1/1/2012</STARTDATE> <DEPT>IT</DEPT> </EMPLOYEE> <EMPLOYEE> <ID>2</ID> <NAME>Dan</NAME> <SALARY>515.2</SALARY> <STARTDATE>9/23/2013</STARTDATE> <DEPT>Operations</DEPT> </EMPLOYEE> <EMPLOYEE> <ID>3</ID> <NAME>Michelle</NAME> <SALARY>611</SALARY> <STARTDATE>11/15/2014</STARTDATE> <DEPT>IT</DEPT> </EMPLOYEE> <EMPLOYEE> <ID>4</ID> <NAME>Ryan</NAME> <SALARY>729</SALARY> <STARTDATE>5/11/2014</STARTDATE> <DEPT>HR</DEPT> </EMPLOYEE> <EMPLOYEE> <ID>5</ID> <NAME>Gary</NAME> <SALARY>843.25</SALARY> <STARTDATE>3/27/2015</STARTDATE> <DEPT>Finance</DEPT> </EMPLOYEE> <EMPLOYEE> <ID>6</ID> <NAME>Nina</NAME> <SALARY>578</SALARY> <STARTDATE>5/21/2013</STARTDATE> <DEPT>IT</DEPT> </EMPLOYEE> <EMPLOYEE> <ID>7</ID> <NAME>Simon</NAME> <SALARY>632.8</SALARY> <STARTDATE>7/30/2013</STARTDATE> <DEPT>Operations</DEPT> </EMPLOYEE> <EMPLOYEE> <ID>8</ID> <NAME>Guru</NAME> <SALARY>722.5</SALARY> <STARTDATE>6/17/2014</STARTDATE> <DEPT>Finance</DEPT> </EMPLOYEE> </RECORDS>
讀取XML文件
XML文件是由R使用函數XMLPARSE()讀取。它存儲為R語言中的列表,如下所示:
# Load the package required to read XML files. library("XML") # Also load the other required package. library("methods") # Give the input file name to the function. result <- xmlParse(file="input.xml") # Print the result. print(result)
當我們上麵的代碼執行時,它產生以下結果:
1 Rick 623.3 1/1/2012 IT 2 Dan 515.2 9/23/2013 Operations 3 Michelle 611 11/15/2014 IT 4 Ryan 729 5/11/2014 HR 5 Gary 843.25 3/27/2015 Finance 6 Nina 578 5/21/2013 IT 7 Simon 632.8 7/30/2013 Operations 8 Guru 722.5 6/17/2014 Finance
獲取目前在XML文件的節點數量
# Load the packages required to read XML files. library("XML") library("methods") # Give the input file name to the function. result <- xmlParse(file="input.xml") # Exract the root node form the xml file. rootnode <- xmlRoot(result) # Find number of nodes in the root. rootsize <- xmlSize(rootnode) # Print the result. print(rootsize)
當我們上麵的代碼執行時,它產生以下結果:
output [1] 8
第一個節點的細節
讓我們來看看在解析文件的第一條記錄。它會給我們存在於頂層節點的各種元素的詳細。
# Load the packages required to read XML files. library("XML") library("methods") # Give the input file name to the function. result <- xmlParse(file="input.xml") # Exract the root node form the xml file. rootnode <- xmlRoot(result) # Print the result. print(rootnode[1])
當我們上麵的代碼執行時,它產生以下結果:
$EMPLOYEE1Rick623.31/1/2012ITattr(,"class") [1] "XMLInternalNodeList" "XMLNodeList"
獲取一個節點的不同元素
# Load the packages required to read XML files. library("XML") library("methods") # Give the input file name to the function. result <- xmlParse(file="input.xml") # Exract the root node form the xml file. rootnode <- xmlRoot(result) # Get the first element of the first node. print(rootnode[[1]][[1]]) # Get the fifth element of the first node. print(rootnode[[1]][[5]]) # Get the second element of the third node. print(rootnode[[3]][[2]])
當我們上麵的代碼執行時,它產生以下結果:
1ITMichelle
XML到數據幀
為了有效地處理大型文件中的數據,我們將XML文件中讀出的數據作為數據幀。然後處理進行數據分析的數據幀。
# Load the packages required to read XML files. library("XML") library("methods") # Convert the input xml file to a data frame. xmldataframe <- xmlToDataFrame("input.xml") print(xmldataframe)
當我們上麵的代碼執行時,它產生以下結果:
ID NAME SALARY STARTDATE DEPT 1 1 Rick 623.3 1/1/2012 IT 2 2 Dan 515.2 9/23/2013 Operations 3 3 Michelle 611 11/15/2014 IT 4 4 Ryan 729 5/11/2014 HR 5 5 Gary 843.25 3/27/2015 Finance 6 6 Nina 578 5/21/2013 IT 7 7 Simon 632.8 7/30/2013 Operations 8 8 Guru 722.5 6/17/2014 Finance
由於數據現在可以作為一個數據幀,我們可以用數據幀的相關函數讀取和處理的文件。