2012-02-27 14 views
10

mam tego pod ramkę danychspłaszczyć ramkę danych

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") 

Chcę listę wszystkich wartości w drugiej kolumnie, a mianowicie

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

Czy istnieje prosty sposób aby to osiągnąć?

Odpowiedz

13

Linia ta załatwia sprawę:

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

lub równoważne:

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

lub nawet:

unlist(test[["seq"]]) 

Wyjście z tych funkcji to:

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

Aby pozbyć się nazwami powyżej wektor znaków, zadzwoń as.character na wynikającym z przedmiotu:

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

super, dziękuję !!! – speendo

+0

Czy możesz zaznaczyć znak pod moją odpowiedzią? W ten sposób wszyscy wiedzą, że to pytanie zostało odebrane (i dostaję trochę powtórzenia :)) –

+0

+1 za pokazanie trzech dobrych alternatyw. – Andrie

4

To nie jest odpowiedź, ale kontynuacją/uzupełnienie Pawła odpowiedź:

Niezmiennie na dowolny liczba iteracji metoda c działa najlepiej. Jednak wraz ze wzrostem liczby iteracji do 100000 niepublikowanych przeszedłem od najbiedniejszej do bardzo zbliżonej do metody c.

1000 iteracji

 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 iteracji

 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 

Jeszcze raz dziękujemy za dzielenie Paul!

Benchmarking wykonywane przy użyciu rbenchmark na komputerze z systemem Windows 7 R 2.14.1

+0

Dzięki za dane porównawcze! –