将因子和字符转换为数据框中的数字

时间:2016-02-24 19:18:47

标签: r dataframe type-conversion

我有一个我想要过滤的数据框。结构如下:

'dataframe': 45 obs. of 1450 variables:
$ X01493112  :Factor w/ 47 levels "01493112", "0145769",...
..- attr(*, "names")= chr "510130020" "510360002"

我有一种感觉我无法过滤它,因为我有因素和字符,但我无法将其转换为数字。我试过了:

as.numeric.factor <- function(x) {as.numeric(levels(x))[x]}
df2 <- as.numeric.factor(df1)

和许多其他转换,但我无法弄清楚为什么它不会工作,当我调用新的df时我得到了

>numeric(0)

2 个答案:

答案 0 :(得分:3)

使用一些示例数据会很有帮助,但请尝试:

df$your_factor_variable_now_numeric <- 
                as.numeric(as.character(df$your_old_factor_variable))

并仅将其用于转换因子变量,而不是完整的数据帧。您还可以查看type.convert。如果要转换数据框中的所有因子,可以使用

行中的内容
 df[] <- lapply(df, function(x) as.numeric(as.character(x)))

请注意,这会转换所有因素,如果您有不表示数值的因素,则可能不是您想要的因素。如果不必要的转换是个问题,或者数据中存在非数字因素或字符,则以下内容是合适的:

 numerify <- function(x) if(is.factor(x)) as.numeric(as.character(x)) else x
 df[] <- lapply(df, numerify)

在更一般的观点上,如果使用过滤,您的意思是对数据帧进行子集化,则变量的类型不应阻止您进行过滤。但是,应使用上面的代码解决类型转换。

答案 1 :(得分:0)

fun1 <- function(x) as.numeric(as.character(x))
fun2 <- function(x) as.numeric(x)

fac_to_num <- function(y) modifyList(y,lapply(y[sapply(y,is.factor)],fun1))

char_to_num <- function(y) modifyList(y,lapply(y[sapply(y,is.factor)],fun2))

fac_to_num应用于您的数据中的列 - >&gt;数字转换,char_to_num用于字符到数字转换。