【问题标题】:How to make a data frame of a list containing vectors and a matrix in R如何在R中制作包含向量和矩阵的列表的数据框
【发布时间】:2018-10-10 10:01:12
【问题描述】:

我正在努力将列表转换为 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

我错过了什么,我该如何解决?

【问题讨论】:

    标签: r list matrix vector


    【解决方案1】:
    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
    

    【讨论】:

    • data.frame(x=rep(x, each=length(y)), y=y, z=as.vector(z))
    【解决方案2】:

    另一个选项是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
    # ...
    

    【讨论】:

      猜你喜欢
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多