我有一个我想要过滤的数据框。结构如下:
'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)
答案 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
用于字符到数字转换。