2015-04-16 32 views
11

Tôi đã có một danh sách liệt kê, hãy gọi nó listHolder, trong đó có chiều dài 5.danh sách R của danh sách này để data.frame

Mỗi phần tử trong listHolder là danh sách các dữ liệu số, với 160 hoặc lâu hơn các yếu tố.

Tôi cần phải chuyển danh sách danh sách này thành một chiều dài data.frame có chiều dài 5, với mỗi phần tử là một vectơ số có 160 phần tử trở lên.

Nhưng tất cả những gì tôi đã cố gắng, từ lặp qua danh sách các danh sách và biến mỗi phần tử với as.numeric(unlist(listHolder[[i]])), để

data.frame(matrix(unlist(listHolder), nrow = length(totalKeywords), byrow = T)) 

kết thúc việc tạo ra một khung dữ liệu có độ dài 160 hoặc lâu hơn, với mỗi phần tử là một vector số với 5 hoặc nhiều phần tử.

Làm cách nào để làm những gì tôi muốn?

Cố gắng data.frame(matrix(unlist(totalKeywords), nrow=132, byrow=T)) cho kết quả ngược lại với những gì tôi muốn - 160 mục nhỏ mỗi 5 thành phần.

+3

Hãy thử 'do.call (rbind, listHolder) '. –

+1

có thể trùng lặp của [danh sách R thành khung dữ liệu] (http://stackoverflow.com/questions/4227223/r-list-to-data-frame) –

+0

Tôi nghĩ rằng anh ấy muốn biến từng mục trong danh sách trong một cột, vì vậy, sẽ là 'cbind' thay vì' rbind'. – Molx

Trả lời

16

Giá trị của nrow cần được sửa. Tôi cố định mã của bạn như sau:

dd <- as.data.frame(matrix(unlist(listHolder), nrow=length(unlist(listHolder[1])))) 
+1

Tôi có thể làm gì để bảo quản các loại? Theo cách tiếp cận này, nếu một cột là 'POSIXct', nó chuyển đổi nó thành' chr'. –

6

này đạt được một kết quả tương tự, nhưng là trực quan hơn (với tôi ít nhất)

#Generate fake data 
listoflists=list(c(1,'a',3,4),c(5,'b',6,7)) 

#Convert to a dataframe, transpose, and convert the resulting matrix back to a dataframe 
df= as.data.frame(t(as.data.frame(listoflists))) 

#Strip out the rownames if desired 
rownames(df)<-NULL 

#Show result 
df 
Các vấn đề liên quan