我有一个矢量列表,如示例中所示
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将导致大量的列.非常感谢你的评论.
您可以使用基本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)