将数据框列转换为存储在列表中的矢量 [英] Convert data frame columns into vectors stored in a list
本文介绍了将数据框列转换为存储在列表中的矢量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的数据由许多列/变量和三行组成。每个变量都是一个整数,各行和各列的值各不相同。以下是我的数据的最小示例:
# Minimal example of data frame I have
df <- data.frame(x1 = c(1,2,3),
x2 = c(4,1,6),
x3 = c(3,0,2),
x4 = c(3,0,1))
我试图以某种方式将每一列折叠成一个包含每行中的值的数字向量。例如,我希望如下所示:
# Desired data based on minimal example
target_list <- list(c(1,2,3),
c(4,1,6),
c(3,0,2),
c(3,0,1))
最终目标是能够获取另一个具有许多列的数据框,并生成仅包含索引与每个数值向量中的值匹配的列的新数据框。对于每个向量,我都会生成另一个数据帧。所有帧都存储在列表中。给定工作示例输入的目标输出的示例:
# Example "super data frame" I will subset. The values contained in each column are arbitrary.
df2 <- data.frame(z1 = "a", z2 = "b",
z3 = 999, z4 = NA,
z5 = "foo", z6 = "bar")
# Subset "super data frame" to only columns in each vector in the list, store in a list
list(df2[ ,target_list[[1]]],
df2[ ,target_list[[2]]],
df2[ ,target_list[[3]]],
df2[ ,target_list[[4]]])
我尝试了各种粘贴方法,但它们产生的字符向量不能用于按索引选择其他数据框的列,例如,它会产生这样的结果:
paste0(df[1, ], df[2, ], df[3, ], df[4, ])
有关如何从df生成数字向量列表的帮助?
推荐答案
可能我遗漏了什么,但您的输入和目标之间唯一的区别是三个属性:
attributes(df)
#$names
#[1] "x1" "x2" "x3" "x4"
#
#$class
#[1] "data.frame"
#
#$row.names
#[1] 1 2 3
您可以删除它们:
attributes(df) <- NULL
df
#[[1]]
#[1] 1 2 3
#
#[[2]]
#[1] 4 1 6
#
#[[3]]
#[1] 3 0 2
#
#[[4]]
#[1] 3 0 1
或者:
c(unname(unclass(df)))
但是,当然,这些属性不会造成伤害,而且您始终可以将data.Frame视为列表(因为它实际上是一个列表)。
这篇关于将数据框列转换为存储在列表中的矢量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文