我正在努力将列表转换为R中的数据帧。我想从包含两个向量和一个矩阵(x,y和z)的列表中创建一个数据帧。数据如下:
x <- c(1,2,3,4,5)
y <- c(0,1,2,3,4)
z <- matrix(as.numeric(sample(100:200, 25)), nrow=5, ncol=5, byrow = TRUE)
lst <- list(x,y,z)
我想将其转换为如下所示的数据框:
x1 y1 z
x1 y2 z
x1 y3 z
x1 y4 z
x1 y5 z
x2 y1 z
etc...
分别具有列名称x,y和z。关于列表到数据帧的转换,Stackoverflow上已经有很多问题,但是我找不到包含向量和数据帧的列表的选项。到目前为止,我尝试过的选项都没有成功。
我尝试过:
#Option 1:
as.data.frame(lst)
#Option 2:
enframe(lst) #from the tidyverse package
#Option 3:
melt(lst) #from the reshape2 package
我错过了什么,如何解决?
答案 0 :(得分:0)
x <- c(1,2,3,4,5)
y <- c(0,1,2,3,4)
set.seed(123)
z <- matrix(as.numeric(sample(100:200, 25)), nrow=5, ncol=5, byrow = TRUE)
df <- data.frame( z = as.vector( z ) )
df$x <- rep( x, each = nrow( df ) / length( x ) )
df$y <- rep( y, times = nrow( df ) / length( y ) )
head(df, 10)
# z x y
# 1 129 1 0
# 2 104 1 1
# 3 187 1 2
# 4 177 1 3
# 5 172 1 4
# 6 178 2 0
# 7 150 2 1
# 8 198 2 2
# 9 120 2 3
# 10 155 2 4
答案 1 :(得分:0)
另一个选项是expand.grid(x, y)
-返回一个数据帧-将z
转换为向量后,我们会向其中添加数据。
setNames(`[<-`(expand.grid(y, x), "z", value = c(z)), c("y", "x", "z"))
# y x z
#1 0 1 129
#2 1 1 104
#3 2 1 187
#4 3 1 177
#5 4 1 172
#6 0 2 178
# ...