将数据帧转换为R中的列表
我有一个数据帧“a”,看起来像这样将数据帧转换为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
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)