这里我有一个包含不同长度向量的列表。我想获得一个data.frame。我在SO中看过很多关于它的帖子(参见参考资料),但是没有一个像我预期的那么简单,因为这确实是数据预处理中的常见任务。谢谢。
如果有效,这里最简单的意思是as.data.frame(aa)
。所以R的基础包中的一个函数会很棒。 sapply(aa, "length<-", max(lengths(aa)))
实际上有四个功能。
示例如下所示。
输入:
aa <- list(A=c(1, 3, 4), B=c(3,5,7,7,8))
输出:
A B
1 3
3 5
4 7
NA 7
NA 8
A和B是data.frame的合着名。
一个答案是sapply(aa, '[', seq(max(sapply(aa, length))))
,但它也很复杂。
参考:
答案 0 :(得分:6)
我们可以使用
data.frame(lapply(aa, "length<-", max(lengths(aa))))
答案 1 :(得分:1)
制作此功能:
listToDF <- function(aa){
sapply(aa, "length<-", max(lengths(aa)))
}
然后使用它,简单地说:
listToDF(aa)
答案 2 :(得分:1)
使用tidyverse软件包。将列表放在嵌套的数据框中。为列表中的每个向量提取name
。取消嵌套数据帧。给每个向量中的每个元素一个行索引i
,以宽格式散布数据
aa <- list(A = c(1, 3, 4), B = c(3, 5, 7, 7, 8))
library(tidyverse)
data_frame(data = aa) %>%
group_by(name = names(data)) %>%
unnest() %>%
mutate(i = row_number()) %>%
spread(name, data)
# A tibble: 5 x 3
i A B
* <int> <dbl> <dbl>
1 1 1 3
2 2 3 5
3 3 4 7
4 4 NA 7
5 5 NA 8