сгладить фрейм данных - PullRequest
       28

сгладить фрейм данных

12 голосов
/ 27 февраля 2012

У меня есть этот вложенный фрейм данных

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

Я хочу получить список всех значений во втором столбце, а именно:

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

Есть ли простой способ добиться этого?

Ответы [ 2 ]

15 голосов
/ 27 февраля 2012

Эта строка выполняет трюк:

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

или эквивалент:

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

или даже:

unlist(test[["seq"]])

Вывод этих функций:

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

Чтобы избавиться от имен над символьным вектором, вызовите as.character для получающегося объекта:

> as.character((unlist(test[["seq"]])))
 [1] "1997" "1997" "1997" "2007" "2007" "2007" "2007" "2007" "2007" "2007"
[11] "2007"
5 голосов
/ 27 февраля 2012

Это не ответ, а продолжение / дополнение к ответу Павла:

Последовательно на любом количестве итераций метод c работает лучше всего. Однако, когда я увеличил количество итераций до 100000, список unlist перешел от самого бедного к очень близкому к методу c.

1000 итераций

     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 итераций

     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

Еще раз спасибо, что поделились с Полом!

Бенчмаркинг, выполненный с использованием rbenchmark на машине win 7 под управлением R 2.14.1

...