2013-08-16 3 views
3

각 요소가 nr = 230 및 ncol = 4 인 zoo 개체 인 13,000 개의 요소 목록을 데이터 프레임으로 변환하려고합니다.큰 목록을 data.frame으로 변환

나는 setattr(mylist, 'class', 'data.frame')을 시도했지만, NA의 거대한 벡터가 생성되었습니다. plyr 패키지의 quickdf(mylist) 함수도 시도했지만 작동하지 않았습니다.

do.call(rbind.data.frame, mylist) 유형 방법은 매우 느리므로이 경우 옵션이 아닙니다.

이러한 목록을 데이터 프레임으로 변환하는 가장 효율적인 방법에 대한 제안이 있으십니까? 이 효율적인 경우

+0

제목에 중복 태그 이름을 추가하지 마십시오. –

+0

중복되는 태그는 무엇입니까? – Mayou

+0

[tag : R] 태그 (제목). –

답변

8

사용 rbindlist을 시도 할 수 있습니다.

data <- matrix(data = 1, nrow = 230, ncol = 4) 
lstData <- rep(list(data), 16000) 

library(data.table) 
lstData <- Map(as.data.frame, lstData) 
dfrData <- rbindlist(lstData) 


system.time(dfrData <- rbindlist(lstData)) 
user system elapsed 
0.12 0.03 0.15 
+0

잘 작동합니다! 결과는'data.table'이며, 나중에 간단히 data.frame으로 변환합니다! 감사!! – Mayou

+2

1. 시계열의 경우 xts를 사용합니다. 기본적으로 동물원이지만 속도는 최적화되어 있습니다. 2. 날짜 자체에 대해 rbindlist를 수행 할 수 있습니다. 'lstIndex <- Map (as.data.frame, Map (index, lstData)) dfrIndex <- rbindlist (lstIndex) setnames (dfrIndex, "Date") lstData <- 맵 (as.data.frame, lstData)) dfrData <- rbindlist (lstData) zooResult <- as.zoo (dfrData, as.Date (dfrIndex $ Date))' –

+1

내 문제가 해결되었습니다. 고마워요! 나는 당신에게 대답을 upvoted했을 것이다, 나는 단지 그것에 대한 충분한 명성을 가지고 있지 않다 :) – Mayou

0

나는 잘 모르겠지만, 당신은 data.table 패키지에서

library(plyr) 
ldply(mylist) 
+0

질문에서 지정했듯이,'docall.rbind (mylist)'는 메모리 관리 관점에서 보면 효율적이지 않고 거대한 실행 시간을 요구하기 때문에 옵션이 아닙니다. 나는'ldply (mylist)'를 시도하지 않았습니다. 시도 할 것입니다, 고마워요! – Mayou

+0

나는 그것을 지웠다. – Metrics

+1

감사합니다. 나는 현재'ldply (mylist)'를 시도하고 있으며 매우 느리다. 과도하지 않으면 런타임을보고 실행 시간을보고하게 할 것이다. 여전히 나는이 경우보다 효율적인 방법이 있어야한다고 생각합니다. – Mayou

관련 문제