2012-02-27 23 views
10

Tôi có khung dữ liệu này lồng nhauflatten một khung dữ liệu

test <- structure(list(id = c(13, 27), seq = structure(list(
`1` = c("1997", "1997", "1997", "2007"), 
`2` = c("2007", "2007", "2007", "2007", "2007", "2007", "2007")), 
.Names = c("1", "2"))), .Names = c("penr", 
"seq"), row.names = c("1", "2"), class = "data.frame") 

Tôi muốn có một danh sách tất cả các giá trị trong cột thứ hai, cụ thể là

result <- c("1997", "1997", "1997", "2007", "2007", "2007", "2007", "2007", "2007", "2007", "2007") 

Có một cách dễ dàng để đạt được điều này?

Trả lời

13

Dòng này hiện các trick:

do.call("c", test[["seq"]]) 

hoặc tương đương:

c(test[["seq"]], recursive = TRUE) 

hoặc thậm chí:

unlist(test[["seq"]]) 

Kết quả của các chức năng này là:

11  12  13  14  21  22  23  24  25  26  27 
"1997" "1997" "1997" "2007" "2007" "2007" "2007" "2007" "2007" "2007" "2007" 
.210

Để thoát khỏi những cái tên trên vector nhân vật, gọi as.character trên đối tượng kết quả:

> as.character((unlist(test[["seq"]]))) 
[1] "1997" "1997" "1997" "2007" "2007" "2007" "2007" "2007" "2007" "2007" 
[11] "2007" 
+0

tuyệt vời, cảm ơn bạn !!! – speendo

+0

Bạn có thể đánh dấu vào ô bên dưới câu trả lời của tôi không? Theo cách đó, mọi người đều biết câu hỏi này đã được trả lời (và tôi nhận được một số đại diện :)) –

+0

+1 để hiển thị ba lựa chọn thay thế tốt. – Andrie

4

Đây không phải là một câu trả lời nhưng một theo dõi/bổ sung câu trả lời của Paul:

Luôn trên bất kỳ số lần lặp mà phương thức c thực hiện tốt nhất. Tuy nhiên, khi tôi tăng số lần lặp lại lên 100000, danh sách không đi từ người nghèo nhất đến rất gần với phương pháp c.

1000 lặp

 test replications elapsed relative user.self sys.self user.child sys.child 
2  c   1000 0.04 1.333333  0.03  0   NA  NA 
1 do.call   1000 0.03 1.000000  0.03  0   NA  NA 
3 unlist   1000 0.23 7.666667  0.04  0   NA  NA 

100.000 lặp

 test replications elapsed relative user.self sys.self user.child sys.child 
2  c  100000 8.39 1.000000  3.62  0   NA  NA 
1 do.call  100000 10.47 1.247914  4.04  0   NA  NA 
3 unlist  100000 9.97 1.188319  3.81  0   NA  NA 

Một lần nữa cảm ơn vì chia sẻ Paul!

Điểm chuẩn thực hiện bằng rbenchmark trên một máy win 7 chạy R 2.14.1

+0

Cảm ơn dữ liệu điểm chuẩn! –