将数据帧转换为R中的列表

将数据帧转换为R中的列表,r,list,matrix,dataframe,R,List,Matrix,Dataframe,我有一个数据帧“a”,看起来像这样 a1 a2 a3 a 1 45 b 2 55 c 4 34 d 3 87 我需要将这个数据帧转换成一个列表,如下所示 a a2 1 a a2 2 a a2 4 a a2 3 b a3 45 b a3 55 b a3 34 b a3 87 如何在R中实现这一点?我们使用Map创建一个包含元素“a”、“b”的新列,方法是在rbind的list元素的rbindlist第2列和第3

我有一个数据帧“a”,看起来像这样

a1  a2  a3
a   1   45
b   2   55
c   4   34
d   3   87
我需要将这个数据帧转换成一个列表,如下所示

a   a2  1
a   a2  2
a   a2  4
a   a2  3
b   a3  45
b   a3  55
b   a3  34
b   a3  87

如何在R中实现这一点?

我们使用
Map
创建一个包含元素“a”、“b”的新列,方法是在
rbind
list
元素的
rbindlist
第2列和第3列上循环,使用
idcol
选项从
列表的
名称
创建“grp”列

 library(data.table)
 setnames(rbindlist(Map(data.frame, df1[-1], 
       letters[1:2]), idcol='grp'), 2:3, c('v1', 'v2'))[]
#   grp v1 v2
#1:  a2  1  a
#2:  a2  2  a
#3:  a2  4  a
#4:  a2  3  a
#5:  a3 45  b
#6:  a3 55  b
#7:  a3 34  b
#8:  a3 87  b
数据
df1您的输出对我来说没有什么意义-为什么第一列
a
b
只是一列<代码>堆栈(a[-1])
可能吗?a和b只是一个example@Doej您显示的输出看起来不像一个
列表
,那么它看起来怎么样?我认为它是以列表的形式出现的错误:找不到函数“setDT”@Doej您必须加载
库(data.table)
@Doej这是正确的,如果您查看我的帖子,我将其用作
data.frame
@Doej您可以使用相同的代码,除了使用
字母[1:5]
和在
集合名称中更改accordingly@Doej这是因为您使用的是
字母[1:3]
。相反,使用
df1$a1[1:3]
setnames(rbindlist(Map(data.frame,df1[-1],df1[1:3,1]),idcol=“grp”),2:4,paste0(“v”,1:3))[]
df1 <- read.table(text="a1  a2  a3
 a   1   45
 b   2   55
 c   4   34
 d   3   87", sep="", header=TRUE, stringsAsFactors=FALSE)