代码之家  ›  专栏  ›  技术社区  ›  NelsonGon phoxis

防止因子转换为级别

r
  •  0
  • NelsonGon phoxis  · 技术社区  · 7 年前

    我想用 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
    

    我事先不知道名单的数目。我试过了,但它返回nas:

    plyr::ldply(test1,function(ele) do.call(cbind,ele))
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Anders Ellern Bilgrau    7 年前

    绝对没有进行转换:

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

    但我发现你的问题不清楚,因为你写了“忽略输出的本质”。你明确地创造了 data.frame 所以我不确定你到底期望什么。记住 factor R中的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
    

    编辑2 从评论中的讨论来看,这些都有效吗?

    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