从列表列表创建数据框

时间:2016-06-20 15:26:58

标签: r

我有一个列表列表,我希望将其转换为一个数据框,其中每个子列表都是一行,子列表的每个元素都是列。我有一个有效的解决方案,但效率不高。

# Sample data
data <- list(structure(list(pop_size = 31874, p_value = 0.373458207009449), .Names = c("pop_size", 
"p_value")), structure(list(pop_size = 41874, p_value = 0.303284884476696), .Names = c("pop_size", 
"p_value")), structure(list(pop_size = 51874, p_value = 0.249409377411917), .Names = c("pop_size", 
"p_value")), structure(list(pop_size = 61874, p_value = 0.206924824186035), .Names = c("pop_size", 
"p_value")), structure(list(pop_size = 71874, p_value = 0.172823408801164), .Names = c("pop_size", 
"p_value")))

# My solution
matrix <- matrix(NA,nrow=length(data),ncol=2)
for(i in 1:length(data)){
  matrix[i,1] <- data[[i]]$pop_size
  matrix[i,2] <- data[[i]]$p_value
}
df <- data.frame(matrix)
colnames(df) <- c("pop_size","p_value")
df
  pop_size   p_value
1    31874 0.3734582
2    41874 0.3032849
3    51874 0.2494094
4    61874 0.2069248
5    71874 0.1728234

我得到了我想要的结果,我只是在寻找更好的方法。谢谢!

修改 事实证明这已经在另一个线程中得到了解答。我个人认为这是最好的解决方案。

library(plyr)
df <- ldply(data, data.frame)

3 个答案:

答案 0 :(得分:3)

 df <- data.frame(matrix(unlist(data), nrow=5, byrow=T))

这应该可以解决您的问题

答案 1 :(得分:2)

这应该有效:

df <- matrix(unlist(data),ncol=2,byrow=T)

答案 2 :(得分:1)

你可以试试这个:

do.call(rbind, lapply(data, as.data.frame))
  pop_size   p_value
1    31874 0.3734582
2    41874 0.3032849
3    51874 0.2494094
4    61874 0.2069248
5    71874 0.1728234