2014-09-21 2 views
5

각 레코드에 대해 행을 생성하는 하나의 행으로 중첩 된 목록을 평평 :as.data.frame 대신 내가 다음과 같습니다 중첩 된 목록을

mylist <- vector("list", 2) 
mylist[[1]]$name <- "The Tucson IOT Meetup Group" 
mylist[[1]]$state <- "AZ" 
mylist[[2]]$name <- "#SFMySQL Meetup" 
mylist[[2]]$state <- "CA" 

mylist 
[[1]] 
[[1]]$name 
[1] "The Tucson IOT Meetup Group" 

[[1]]$state 
[1] "AZ" 


[[2]] 
[[2]]$name 
[1] "#SFMySQL Meetup" 

[[2]]$state 
[1] "CA" 

내가 가진 데이터 프레임이 점을 설정하고 싶습니다 열 "이름"과 "상태"및 각 레코드에 대해 하나씩 두 개의 행이 있습니다. 내가이 일을 as.data.frame를 사용하려고하면, 나는 다음과 같이 기록 '각 변수에 대해 별도의 열이, 한 행의 데이터를 다시 얻을 :

myframe <- as.data.frame(mylist) 
myframe 
           name state   name.1 state.1 
1 The Tucson IOT Meetup Group AZ #SFMySQL Meetup  CA 

잘 모르겠어요 무슨 일이야. 이 작업을 수행하는 올바른 방법은 무엇입니까?

답변

4
do.call(rbind.data.frame, mylist) 
##       name state 
## 2 The Tucson IOT Meetup Group AZ 
## 21    #SFMySQL Meetup CA 

do.call 기능 함수를 적용 다소 (l/S)처럼 기능하며, 연속 통화의 결과를 축적 할 수있다.

Reduce(rbind.data.frame, mylist) 
##       name state 
##2 The Tucson IOT Meetup Group AZ 
##21    #SFMySQL Meetup CA 

심지어 rbindReduce와 "작업"을 얻을 수 있습니다 : :이 Reduce 기능은 종종 같은 결과를 달성

Reduce(rbind, mylist) 
##  name       state 
##init "The Tucson IOT Meetup Group" "AZ" 
##  "#SFMySQL Meetup"    "CA" 

는 처음에 그것이 최선의 결과가 될 수있다 생각했다. (필자는 요인보다는 문자 값을 제공하는 결과를 선호합니다.) 그러나 두 방법 모두 str()을 사용하여 볼 때 다소 이상한 구조를 제공합니다.

+0

을 시도합니다. 뭘하고 있니? 왜 rbind (mylist) 작동하지 않을까요? – Traviskorte

+1

'mylist'는 벡터 나 행렬이 아니므로'rbind.default'가 작동하지 않고'rbind.list'도 없습니다. –

+0

결과''row.names''는 이상합니다 (위의 21 개). 이것이 무해하다고 가정하고, 더 나아가서 우리는 항상 그것들을''NULL'' 할 수 있습니다 ... – PatrickT

3

또는 data.tablerbindlist 기능 (큰 데이터 세트에 대한 매우 효율적으로) 확실히 작동

library(data.table) 
rbindlist(mylist) 
#       name state 
# 1: The Tucson IOT Meetup Group AZ 
# 2:    #SFMySQL Meetup CA 
관련 문제