Сгладить структуру данных
У меня есть этот вложенный фрейм данных
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")
Есть ли простой способ достичь этого?
Ответы
Ответ 1
Эта строка делает трюк:
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"
Ответ 2
Это не ответ, а ответ на вопрос/ответ на вопрос Павла:
Постоянно на любом количестве итераций метод c работает наилучшим образом. Однако, когда я увеличил количество итераций до 100000, список перешел от самых бедных к очень близко к методу 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
на машине с выигрышем 7, работающей под управлением R 2.14.1