我有一个嵌套的数据框
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")有什么简单的方法可以做到这一点吗?
发布于 2012-02-27 23:15:35
下面这行代码可以做到这一点:
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"发布于 2012-02-28 00:05:56
这不是一个答案,而是对Paul答案的后续/补充:
在任何次数的迭代中,c方法的性能都是最好的。然而,随着我将迭代次数增加到100000次,unlist从最差的变成了非常接近c方法的。
1000 iterations
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 NA100,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再次感谢你的分享,Paul!
在运行R 2.14.1的win 7计算机上使用rbenchmark执行基准测试
https://stackoverflow.com/questions/9467321
复制相似问题