我有一个列表列表,我希望将其转换为一个数据框,其中每个子列表都是一行,子列表的每个元素都是列。我有一个有效的解决方案,但效率不高。
# 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)
答案 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