代码之家  ›  专栏  ›  技术社区  ›  Denis

转换数据帧到列表列表

  •  0
  • Denis  · 技术社区  · 5 年前

    v <- list(
              row1=list(col1 = as.Date("2011-01-23"), col2="A"), 
              row2=list(col1 = as.Date("2012-03-03"), col2="B"))
    d <- do.call(rbind, lapply(v, as.data.frame))
    d$col3 <- 2
    

    我怎么得到 d 返回列表列表(类似于 v

    vr <- list(
              row1=list(col1 = as.Date("2011-01-23"), col2="A", col3=2), 
              row2=list(col1 = as.Date("2012-03-03"), col2="B", col3=2))
    
    2 回复  |  直到 5 年前
        1
  •  5
  •   markus    5 年前

    你能做到的

    out <- lapply(split(d, rownames(d)), as.list)
    out
    #$row1
    #$row1$col1
    #[1] "2011-01-23"
    
    #$row1$col2
    #[1] "A"
    
    #$row1$col3
    #[1] 2
    
    
    #$row2
    #$row2$col1
    #[1] "2012-03-03"
    
    #$row2$col2
    #[1] "B"
    
    #$row2$col3
    #[1] 2
    

    如果你加上 stringsAsFactors = FALSE d ,即。

    d <- do.call(rbind, lapply(v, as.data.frame, stringsAsFactors = FALSE))
    d$col3 <- 2
    

    identical(out, vr)
    

    退货 TRUE .

        2
  •  2
  •   Lunalo John    5 年前

    在将列作为主列表元素的值传递之前,必须再次遍历这些列,使它们成为列表。我希望下面的代码能有所帮助:

    apply(d,MARGIN = 1, FUN=function(x){as.list(x)})