我想分割一个数据框,以便每一列都是它自己的列表。
因此,如果我们采用虹膜数据集,它将生成一个列表,其结果类似于以下代码(但是我手动执行此操作)。
理想情况下,寻找一种使用
base::split()
或 purrr::map()
传递数据帧,然后将其垂直分割到每个命名列的方法。
# desired outcome
list(
iris$Sepal.Length
,iris$Sepal.Width
,iris$Petal.Length
,iris$Petal.Width
,iris$Species
)
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
我必须摸不着头脑为什么要这样做。我想不出任何放弃这些属性的有效理由。
一个简单的方法是使用
as.list
-
as.list(iris)