首页 > 解决方案 > 防止因子转换为水平

问题描述

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

忽略输出的性质,我怎样才能保持原来的“价值观”,即男孩、酷等?谢谢!期望的输出:

A           B
contents    contents

我无法事先知道列表的数量。我已经尝试过了,但它返回 NA:

plyr::ldply(test1,function(ele) do.call(cbind,ele))

标签: r

解决方案


绝对没有进行任何转换:

out <- as.data.frame(do.call(cbind,test1))
out[[1]]
#[[1]]
#     A
#1  Boy
#2   He
#3   Is
#4 Cool

但是我发现您的问题不清楚,因为您写了“忽略输出的性质”。而且您明确地在 to 中创建了因子data.frame,所以我不确定您的期望是什么。请记住,factorR 中的 s 是带有标签的整数向量。这就是你在印刷品中看到的。

编辑

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

推荐阅读