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

如何在R中将数据帧的列拆分为单独的列表

  •  0
  • alejandro_hagan  · 技术社区  · 2 年前

    我想拆分一个数据帧,使每一列都有自己的列表。

    因此,如果我们取虹膜数据集,它将生成一个列表,其结果类似于下面的代码(但我是手动完成的)。

    理想情况下,寻找一种使用方式 base::split() 或 purrr::map() 传递一个数据帧,然后将其垂直拆分到每个命名列中。

    # desired outcome
    
    list(
    iris$Sepal.Length
    ,iris$Sepal.Width
    ,iris$Petal.Length
    ,iris$Petal.Width
    ,iris$Species
    )
    
    2 回复  |  直到 2 年前
        1
  •  1
  •   IRTFM    2 年前

    data.frame已经是具有该结构的列表。唯一的区别可能是列在data.frame中命名,并且有dim、class和row.names属性。罗纳克沙阿的第一次传球可能是自那以来最有效的解决方案 as.list 将从现有列表中删除“class”和“row.names”属性以及维度,但由于不会删除“names”属性,因此不会完成对所述目标的缩减。为此,您还需要:

    unname(as.list(head(iris)))   # working with the first six rows to preserve space
    #------------------------------
    [[1]]
    [1] 5.1 4.9 4.7 4.6 5.0 5.4
    
    [[2]]
    [1] 3.5 3.0 3.2 3.1 3.6 3.9
    
    [[3]]
    [1] 1.4 1.4 1.3 1.5 1.4 1.7
    
    [[4]]
    [1] 0.2 0.2 0.2 0.2 0.2 0.4
    
    [[5]]
    [1] setosa setosa setosa setosa setosa setosa
    Levels: setosa versicolor virginica
    

    我必须弄清楚为什么要这么努力。我想不出任何合理的理由来抛弃这些特性。

        2
  •  1
  •   Ronak Shah    2 年前

    一个简单的方法是使用 as.list -

    as.list(iris)