【问题标题】:Convert factor to numeric in data frame将因子转换为数据框中的数字
【发布时间】:2019-04-12 18:14:07
【问题描述】:

对于我想在我的数据中引入的一些函数,我需要在我的数据框中添加一个数值。现在它们是因子格式。

有没有什么简单的方法可以将整个数据框“转换”成数字?

“输入”的一部分:

"0.966968221", "0.971526427", "0.975908363", "0.976354638", 
    "0.983503732", "0.984850291", "0.985224666", "0.987182132", 
    "0.987468192", "0.988309086", "0.994685984", "0.996238630", 
    "0.997917853", "0.998762891", "0.999968143", "1.000000000"
    ), class = "factor")), .Names = c("10", "33.95", "58.66", 
"84.42", "110.21", "134.16", "164.69", "199.1", "234.35", "257.19", 
"361.84", "432.74", "506.34", "581.46", "651.71", "732.59", "817.56", 
"896.24", "971.77", "1038.91"), row.names = c("at1g01050.1", 
"at1g01080.1", "at1g01090.1", "at1g01320.2", "at1g01470.1", "at1g01800.1"
), class = "data.frame")

data.frame 中的值类别:

> class(tbl_alles[103,5])
[1] "factor"
> class(tbl_alles[553,12])
[1] "factor"

到目前为止我已经尝试过:

第一次尝试:

tbl_alles <- sapply(tbl_alles, as.numeric) ## Changing the values in the data frame

第二次尝试:

> as.numeric(as.character(tbl_alles))
 [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Warning message:
NAs introduced by coercion 

第三次尝试:

 > as.numeric(levels(tbl_alles))[tbl_alles]
Error in as.numeric(levels(tbl_alles))[tbl_alles] : 
  invalid subscript type 'list

有什么办法吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    一种方法:

    tbl_alles[sapply(tbl_alles, is.factor)] <- lapply(tbl_alles[sapply(tbl_alles, is.factor)], function(x) as.numeric(as.character(x)))
    

    此函数将查找factor 类型的列并将它们转换为numeric

    另一个选项(可能更快一点)是使用data.table

    library(data.table)
    setDT(tbl_alles)[, names(tbl_alles) := lapply(.SD, function(x) if(is.factor(x)) as.numeric(as.character(x)) else x)]
    

    如果您的整个数据集是factor 类型,并且您想将所有列转移到numeric 类型,您可以这样做

    tbl_alles[] <- lapply(tbl_alles, function(x) as.numeric(as.character(x)))
    

    【讨论】:

    • +1,对于最后一种情况,我也会使用:tbl_alles[]
    • @akrun,很好的建议。我总是忘记[] 保持格式的东西:)。已编辑
    • 最后一个非常适合我。我没有看其他人,但非常感谢!
    • @ShaxiLiver,您可能应该使用其他工具作为工具包的一部分(我愿意)。您还可以在对数据集进行子集化并且有很多具有空因子的变量的情况下将它们用作重构函数,您可以tbl_alles[sapply(tbl_alles, is.factor)] &lt;- lapply(tbl_alles[sapply(tbl_alles, is.factor)], factor)
    • 是的,你是对的。如果您不确定您的数据是否仅包含因子,则此功能非常有用,但在这种情况下,我就是使用最后一个因子的原因。无论如何,您对我的问题的回答非常清楚,对很多人都有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 2014-01-05
    • 2013-04-11
    • 2015-06-01
    • 1970-01-01
    相关资源
    最近更新 更多