如何将数据框的列拆分为单独的列表

问题描述 投票:0回答:2

我想分割一个数据框,以便每一列都是它自己的列表。

因此,如果我们采用虹膜数据集,它将生成一个列表,其结果类似于以下代码(但是我手动执行此操作)。

理想情况下,寻找一种使用

base::split()
purrr::map()
传递数据帧,然后将其垂直分割到每个命名列的方法。

# desired outcome

list(
iris$Sepal.Length
,iris$Sepal.Width
,iris$Petal.Length
,iris$Petal.Width
,iris$Species
)
r purrr
2个回答
1
投票

data.frame 已经是具有该结构的列表。唯一的区别可能是列在 data.frame 中命名,并且有 dim、class 和 row.names 属性。 RonakShah 提供了可能是最有效的解决方案的第一遍,因为

as.list
将从现有列表中删除“class”和“row.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

我必须摸不着头脑为什么要这样做。我想不出任何放弃这些属性的有效理由。


1
投票

一个简单的方法是使用

as.list
-

as.list(iris)
© www.soinside.com 2019 - 2024. All rights reserved.