防止因素转换为水平

时间:2019-02-06 18:38:30

标签: r

我正在尝试使用lapplydo.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))

1 个答案:

答案 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