我有一个矢量列表,例如
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}将导致大量的列。
非常感谢您的评论。
答案 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