压平数据框

spe*_*ndo 12 nested r flatten dataframe

我有这个嵌套的数据框架

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")
Run Code Online (Sandbox Code Playgroud)

我想要第二列中所有值的列表,即

result <- c("1997", "1997", "1997", "2007", "2007", "2007", "2007", "2007", "2007", "2007", "2007")
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法来实现这一目标?

Pau*_*tra 15

这条线就行了:

do.call("c", test[["seq"]])
Run Code Online (Sandbox Code Playgroud)

或同等学历:

c(test[["seq"]], recursive = TRUE)
Run Code Online (Sandbox Code Playgroud)

甚至:

unlist(test[["seq"]])
Run Code Online (Sandbox Code Playgroud)

这些功能的输出是:

    11     12     13     14     21     22     23     24     25     26     27 
"1997" "1997" "1997" "2007" "2007" "2007" "2007" "2007" "2007" "2007" "2007" 
Run Code Online (Sandbox Code Playgroud)

要删除字符向量上方的名称,请调用as.character结果对象:

> as.character((unlist(test[["seq"]])))
 [1] "1997" "1997" "1997" "2007" "2007" "2007" "2007" "2007" "2007" "2007"
[11] "2007"
Run Code Online (Sandbox Code Playgroud)


Tyl*_*ker 5

这不是答案,而是保罗答案的后续/补充:

在任何数量的迭代中,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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

再次感谢分享保罗!

rbenchmark在运行R 2.14.1的win 7机器上执行基准测试