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

创建包含可变列表数的列表

  •  3
  • Stan  · 技术社区  · 6 年前

    我需要用以下格式从数据帧的行中创建一个列表:

    df <- data.frame(y1 = c("a", "d"), y2 = c("b", "e"), y3 = c("c", "f"))
    df$y1 <- as.character(df$y1)
    df$y2 <- as.character(df$y2)
    df$y3 <- as.character(df$y3)
    x <- list(
      list(y1 = df$y1[1],
           y2 = df$y2[1],
           y3 = df$y3[1]),
      list(y1 = df$y1[2],
           y2 = df$y2[2],
           y3 = df$y3[2])
    )
    
    > x
    [[1]]
    [[1]]$`y1`
    [1] "a"
    
    [[1]]$y2
    [1] "b"
    
    [[1]]$y3
    [1] "c"
    
    
    [[2]]
    [[2]]$`y1`
    [1] "d"
    
    [[2]]$y2
    [1] "e"
    
    [[2]]$y3
    [1] "f"
    

    这是一个当数据帧中有两行时的示例。当数据帧中的行数是可变的时,如何实现这一点?因此,对于数据帧中的每一行,都应该有一个列表。

    4 回复  |  直到 6 年前
        1
  •  2
  •   Julius Vainora    6 年前

    我们也可以使用 apply 通过浏览行并应用 as.list 对每个人:

    apply(df, 1, as.list)
    [[1]]
    [[1]]$y1
    [1] "a"
    
    [[1]]$y2
    [1] "b"
    
    [[1]]$y3
    [1] "c"
    
    
    [[2]]
    [[2]]$y1
    [1] "d"
    
    [[2]]$y2
    [1] "e"
    
    [[2]]$y3
    [1] "f"
    
        2
  •  1
  •   Ronak Shah    6 年前

    我们首先 split 数据帧的每一行,然后对于每一行,我们使用 as.list

    lapply(split(df, 1:nrow(df)), as.list)
    
    
    #$`1`
    #$`1`$y1
    #[1] "a"
    
    #$`1`$y2
    #[1] "b"
    
    #$`1`$y3
    #[1] "c"
    
    
    #$`2`
    #$`2`$y1
    #[1] "d"
    
    #$`2`$y2
    #[1] "e"
    
    #$`2`$y3
    #[1] "f"
    
        3
  •  1
  •   akrun    6 年前

    我们可以使用 transpose purrr

    library(purrr)
    transpose(df)
    #[1]]
    #[[1]]$y1
    #[1] "a"
    
    #[[1]]$y2
    #[1] "b"
    
    #[[1]]$y3
    #[1] "c"
    
    
    #[[2]]
    #[[2]]$y1
    #[1] "d"
    
    #[[2]]$y2
    #[1] "e"
    
    #[[2]]$y3
    #[1] "f"
    
        4
  •  0
  •   Ben    6 年前

    也许这可以帮助您:

    lst1 <- sapply(df,list)
    lst2 <- lapply(lst1, function(x) split(x, lst1$y2))
    
    推荐文章