2014-02-08 6 views
0

XML 데이터를 data.frame으로 변환하는 간단하고 효율적인 방법을 찾고 있습니다 (그러나 모든 요소가 아님).XML을 데이터 프레임으로 변환

나는이 파일이 : 나는 xpathSApply을 사용 http://www-sop.inria.fr/members/Philippe.Poulard/projet/2013/entries_hotels.xml

을하지만,이 null 요소를 보존하지 않기 때문에 그 나쁜입니다. 파일에서 일부 위도가 비어 있지만 xpathSApply으로 무시됩니다. 비어있는 위도 요소가있는 호텔을 무시할 수 있습니다.

xmlToList 함수를 찾았습니다. 동일한 구조 (데이터 프레임에 많은 NULL 값이없는 것을 피하기 때문에)가 좋기 때문에 XML을 사용하는 것이 좋습니다.

하지만 지금은이 문제가 :

내가 요소의 소모적 인 목록이 목록에서 데이터 프레임을 생성하고 NULL을 요소를 유지하려면, 내가 어떻게 할 수 있습니까? 내가 이런 짓을하지만, 널 (NULL)이 내 벡터에 보관되지 않습니다

library(XML) 
hotels <- "http://www-sop.inria.fr/members/Philippe.Poulard/projet/2013/entries_hotels.xml" 
list <- xmlToList(hotels) 
latitudes.hotels <- c() 
for(element in list) {latitudes.hotels <- c(latitudes.hotels, element$latitude)} 

그리고 내 두 번째 문제는 내가 내 목록과 직접 작업 할 경우, 문제가 모든 이름이 SAMES가 있다는 점이다 : "항목 ".
그런 다음 Id가 x와 동일한 항목 (예 : which(list$entry$ID == x))에 액세스 할 수 있는지 궁금합니다.
나는

ids.hotels <- c() 
for(element in list) {ids.hotels <- c(ids.hotels, element$ID)} 
list[[which(ids.hotels == x)]] 

위보다 벡터의 동일한 유형으로 그것을 할 수 있습니다하지만 난 그것을 할 수있는 더 좋은 방법이 있다고 생각하고, 하나 개의 ID 요소 내 XML 파일에 빈 상태 (empty)의 경우 잘못입니다.

그러나 당신이 기본 함수를 사용하여 요소를 추출하여 누락 된 위도/경도를 유지할 수, 나는 XML 패키지에 익숙하지 않다 어떤 도움

답변

1

주셔서 감사합니다. 예를 들어 '항목의 이름을 사용하여 (LST [1]) 첫 번째를 들어, 이름을 얻을 수있는 목록의 모든 이름 반면 또한 do.call(rbind, list) for uneven number of column

:

lst <- xmlToList(hotels) 

ll <- lapply(1:150 , function(z) 
       c(id=lst[[z]][['ID']],name=lst[[z]][['name_fr']], 
       lat=lst[[z]][['latitude']],long=lst[[z]][['longitude']])) 

library(plyr) 
df <- rbind.fill(
      lapply(ll,function(y){as.data.frame(t(y),stringsAsFactors=FALSE)})) 

여기에서 rbind.fill있어 이름별로 (lst [1])

+0

감사합니다. 매우 빠르고 효율적입니다! –

관련 문제