我正在尝试使用lapply
和do.call
将列表组合成data.frame
对象。但是,如何防止将因子转换为结果对象中的水平?
插图:
dummy<-list(list(data.frame(A=c("Boy","He","Is","Cool"),
stringsAsFactors = T)),
list(data.frame(B=c("Boy","Not","So","Cool"),
stringsAsFactors = T)))
test1<-lapply(dummy,"[")
as.data.frame(do.call(cbind,test1))
问题:
V1 V2
1 1, 3, 4, 2 1, 3, 4, 2
忽略输出的性质,如何保留原始的“值”(即Boy,cool等)? 谢谢! 所需的输出:
A B
contents contents
我无法事先知道列表的数量。我已经尝试过了,但是返回了NA:
plyr::ldply(test1,function(ele) do.call(cbind,ele))
答案 0 :(得分:2)
绝对没有完成转换:
out <- as.data.frame(do.call(cbind,test1))
out[[1]]
#[[1]]
# A
#1 Boy
#2 He
#3 Is
#4 Cool
但是我发现您的问题不清楚,因为您编写了“忽略输出的性质”。而且您明确地在data.frame
中创建了因素,因此我不确定您的期望是什么。请记住,R中的factor
是带有标签的整数向量。那就是您在打印中看到的。
修改:
test1 <- lapply(dummy, "[[", 1)
as.data.frame(do.call(cbind, test1))
# A B
#1 Boy Boy
#2 He Not
#3 Is So
#4 Cool Cool
Edit2 从评论中的讨论中,这些方法中的任何一项有效吗?
test1 <- lapply(dummy, unlist)
as.data.frame(do.call(cbind, test1))
# Same output as above
或者:
data.frame(unlist(test1, recursive = FALSE))
# Same output as above