所以我有一个清单,说:
L1 <- list(1:10, 5:14, 10:19)
现在我试图将列表的输出作为数据帧,以便我的输出看起来:
1. 1 2 3 4 5 6 7 8 9 10
2. 5 6 7 8 9 10 11 12 13 14
3. 10 11 12 13 14 15 16 17 18 19
我正在使用
as.data.frame(L1, row.names = TRUE)
和
list_vect2df(L1)
但他们都没有提供所需的输出
答案 0 :(得分:1)
以下是使用purrr包中的t
,as.data.frame
和map_dfr
的想法。
L1 <- list(1:10, 5:14, 10:19)
library(purrr)
map_dfr(L1, ~as.data.frame(t(.x)))
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
# 1 1 2 3 4 5 6 7 8 9 10
# 2 5 6 7 8 9 10 11 12 13 14
# 3 10 11 12 13 14 15 16 17 18 19
同样的想法,但完全在基础R。
do.call(rbind, lapply(L1, function(x) as.data.frame(t(x))))
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
# 1 1 2 3 4 5 6 7 8 9 10
# 2 5 6 7 8 9 10 11 12 13 14
# 3 10 11 12 13 14 15 16 17 18 19
使用as.data.frame
两次的另一个基础R想法。我们可以稍后更改行名称。
as.data.frame(t(as.data.frame(L1)))
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
# X1.10 1 2 3 4 5 6 7 8 9 10
# X5.14 5 6 7 8 9 10 11 12 13 14
# X10.19 10 11 12 13 14 15 16 17 18 19
最后,同样的想法,但使用data.table中的transpose
函数。
data.table::transpose(as.data.frame(L1))
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
# 1 1 2 3 4 5 6 7 8 9 10
# 2 5 6 7 8 9 10 11 12 13 14
# 3 10 11 12 13 14 15 16 17 18 19
答案 1 :(得分:1)
您可以unlist
并使用matrix
,然后转换为data.frame
。这种情况似乎更快。
as.data.frame(matrix(unlist(L1),nrow=length(L1),byrow=TRUE)
microbenchmark::microbenchmark(
a= map_dfr(L1, ~as.data.frame(t(.x))),
b= do.call(rbind, lapply(L1, function(x) as.data.frame(t(x)))),
c= as.data.frame(t(as.data.frame(L1))),
d= data.table::transpose(as.data.frame(L1)),
e= as.data.frame(matrix(unlist(L1),nrow=length(L1),byrow=TRUE)),
times = 100,unit = "relative")
# Unit: relative
# expr min lq mean median uq max neval
# a 9.146545 8.548656 8.859087 8.859051 9.449237 7.265274 100
# b 13.879833 11.523000 11.433790 10.924726 10.797251 24.012107 100
# c 12.719835 10.635809 10.442108 10.229913 10.259789 7.020377 100
# d 10.439881 9.143530 9.205734 8.859026 9.176125 6.624454 100
# e 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 100
答案 2 :(得分:0)
我在 rbloggers 上找到了一个非常有用的工具。请参阅以下链接的详细信息:
https://www.r-bloggers.com/2013/01/converting-a-list-to-a-data-frame/
基本上,您可以通过以下代码获得该工具,
需要(开发工具)
source_gist(4676064)
然后,使用“as.data.frame”将列表转换为数据框。 df<-as.data.frame(list)
答案 3 :(得分:0)
另一种purrr
解决方案
purrr:::reduce(L1, rbind.data.frame)
使用 rbind
代替给出一个矩阵。