如何在S4`DataFrame`中将因子转换为整数?

时间:2017-01-30 15:35:37

标签: r dataframe s4

我在几个工作流程后获得表格数据作为输出,此输出存储在S4Vectors::DataFrame类中。我打算将factored列转换为整数。是的,我尝试使用as.integer来删除因子,但我得到了一个矩阵。我希望将它们保存在DataFrame对象中。任何人都可以指出我如何在将因子转换为整数后保留原始类类型?

我在DataFrame中获得了这些表格数据: (在运行DF之前,需要安装S4Vectorslibrary(S4Vectors)

DF <- DataFrame(
    query=factor(c(7,17,15,4,7,15,13,19,4,6,13,19,6,11,17,10,11,10)),
    subject=factor(c(7,17,15,4,21,21,13,13,20,20,19,19,6,11,9,1,18,10)),
    score=c(4,4,7,8,11,11,12,12,13,13,13,13,15,21,38,48,49,54)
)

我试过这样的方式:

res <- sapply(DF, function(x) {
    if(is.factor(x))
        as.integer(x)
    x
})

我的解决方案不适合我,因为res成为矩阵,代码效率低下。我希望对此有最简单,最简短的答案(只有一行代码才能实现)。将因子列转换为整数后,我想将其保持为DataFrame

请注意,我有特殊原因要保留DataFrame。我打算让解决方案尽可能简单(计算上更便宜,效率更高)。

这是我想要的输出:

desiredDF <- DataFrame(
    query=as.integer(c(7,17,15,4,7,15,13,19,4,6,13,19,6,11,17,10,11,10)),
    subject=as.integer(c(7,17,15,4,21,21,13,13,20,20,19,19,6,11,9,1,18,10)),
    score=c(4,4,7,8,11,11,12,12,13,13,13,13,15,21,38,48,49,54)
)

如何将DF中的因子列转换为整数,同时将它们保存在DataFrame类中?有没有想过要做到这一点?非常感谢:)

1 个答案:

答案 0 :(得分:0)

你很亲密

res <- data.frame(sapply(DF, function(x) {
    if(is.factor(x))
      as.integer(x)
    x
}))