将列表转换为数据框,每个级别进入单个列

时间:2014-08-29 19:54:33

标签: r

我有一个矢量列表,例如

l=list(a=c("AA","AAA"),b=c("BB","BBB","BBBB"),c=c("CC"))

我想要的是生成一个包含两列的数据框。一个包含第一个级别,第二个包含第二个级别。例如,我需要这个输出

df=data.frame(fst=c(rep("a",2),rep("b",3),rep("c",1)),snd=c("AA","AAA","BB","BBB","BBBB","CC"))

我所做的是,我将列表转换为宽格式数据框,然后使用reshape2包将其融合,如下所示:

library(plyr)
library(reshape2)
df=ldply(l,data.frame)
df_wanted=melt(df2,id.vars=".id",na.rm=TRUE)

所以这使我能够获得所需的结果(仍然需要进行小的处理),但我想知道是否有更简单的解决方案可以直接将列表转换为df_wanted格式,因为在我的情况下{{1}将导致大量的列。 非常感谢您的评论。

2 个答案:

答案 0 :(得分:7)

您可以使用基本stack命令

setNames(stack(l), c("snd","fst"))

#    snd fst
# 1   AA   a
# 2  AAA   a
# 3   BB   b
# 4  BBB   b
# 5 BBBB   b
# 6   CC   c

答案 1 :(得分:3)

您可以直接在melt

上使用l
setNames(melt(l), c("snd", "fst"))
 #   snd fst
#1   AA   a
#2  AAA   a
#3   BB   b
#4  BBB   b
#5 BBBB   b
#6   CC   c