我是新來的xml包和rpath的新手。我有一個非常大的XML文件,我解析。我使用循環編寫了一些代碼,但需要很長時間,所以我正在使用xpath編寫更高效的代碼。 的XML看起來是這樣的:xpath和r - 創建一個密鑰表
...
<person personId="1">
<personNames>
<personName nameId="1000">
<first>Joe<last>
<last>Jones<last>
</personName>
<personName nameId="1001">
<first>Joseph><first>
<last>Jones<last>
</personName>
<personName nameId="1002"
<first>The One and only Joe<first>
</personName>
</personNames>
</person>
...
有些人有一個名字,一些有更多。有些人有姓和名,有的只是名字或只是姓。所以,我需要小心。
我能夠高效地創建使用XPath名字和姓氏的數據幀:
library(XML)
doc<-xmlTreeParse("People.xml",useInternalNodes = TRUE)
top<-xmlRoot(doc)
First<-as.character(xpathApply(top,"//person/personNames/personName/first", xmlValue))
name_id<-as.integer(xpathApply(top,"//person/personNames/personName[first]/@nameId"))
FirstNames<-data.frame(TMS_name_id=name_id,first=First)
Last<-as.character(xpathApply(top,"//person/personNames/personName/last", xmlValue))
name_id<-as.integer(xpathApply(top,"//person/personNames/personName[last]/@nameId"))
LastNames<-data.frame(name_id=name_id,last=Last)
Names<-merge(x=FirstNames,y=LastNames,by="name_id",all=TRUE)
我的姓名數據幀看起來不錯。它有每個人的姓名,名字和姓氏。如果缺少名字或姓氏,則該名稱爲空。它在幾分鐘內產生(610K行!)。真棒。
問題在於將這些名稱與父級personId關聯。我假設我需要遍歷數據框中的名稱,並獲取具有正確nameId屬性的personId,但我無法執行此操作。例如,下面的代碼給我一個空的結果:
xpathSApply(top,"//person/personNames/personName[@nameId="1000"]/@personId")
我期待的結果1。什麼是在PERSONID我的數據幀添加一列的最有效方法是什麼?
鑑於上面的例子,我想看起來像這樣一個數據幀:
nameId first last personId
1000 Joe Jones 1
1001 Joseph Jones 1
1002 The one and only Joe <NA> 1
您能否包含您對樣本輸入數據的期望結果?我不確定你想要的輸出的確切形式。 – MrFlick 2014-12-02 19:07:40
編輯。感謝您的時間。 – user2980491 2014-12-02 19:18:30