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

BIC*_*ube 0 r

我有一个矢量列表,如示例中所示

l=list(a=c("AA","AAA"),b=c("BB","BBB","BBBB"),c=c("CC"))
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

MrF*_*ick 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
Run Code Online (Sandbox Code Playgroud)