【问题标题】:Create a list containing a variable number of lists创建一个包含可变数量列表的列表
【发布时间】:2019-05-31 20:06:38
【问题描述】:

我需要从数据框的行中创建一个列表,格式如下:

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"

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

【问题讨论】:

    标签: r list


    【解决方案1】:

    我们首先 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"
    

    【讨论】:

      【解决方案2】:

      我们也可以通过遍历行并将as.list 应用于每个行来使用apply

      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"
      

      【讨论】:

        【解决方案3】:

        我们可以从purrr使用transpose

        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"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-12-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-26
          • 1970-01-01
          相关资源
          最近更新 更多