R:如何将因子转换为DATA FRAME的数字?

时间:2015-11-12 13:52:17

标签: r integer coercion

我想将因子转换为数字。我知道这是一个常见问题解答,我已经尝试了as.numeric(levels(f))[f]as.numeric(as.character(f))。但这并没有帮助,因为我想将df的所有列(超过1000和所有类型因子)转换为数字。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:-1)

我们可以尝试

 yourdat[] <- lapply(yourdat, function(x) if(is.factor(x)) as.numeric(levels(x))[x]
                              else x)

答案 1 :(得分:-1)

试试这个:

class(df[[name]]) <- "numeric"

在上述解决方案中,您可以将df[[name]] <- as.numeric(df[[name]])替换为mtcars_copy <- data.frame(mpg = mtcars$mpg, cyl = mtcars$cyl, disp = as.factor(mtcars$disp)) str(mtcars_copy) ## 'data.frame': 32 obs. of 3 variables: ## $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... ## $ cyl : num 6 6 4 6 8 6 8 4 4 6 ... ## $ disp: Factor w/ 27 levels "71.1","75.7",..: 13 13 6 16 23 15 23 12 10 14 ... for(name in names(mtcars_copy)){ if(is.factor(mtcars_copy[[name]])){ mtcars_copy[[name]]) <- as.numeric(mtcars_copy[[name]]) } } class(mtcars_copy$disp) ## [1] "integer" str(mtcars_copy) ## 'data.frame': 32 obs. of 3 variables: ## $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... ## $ cyl : num 6 6 4 6 8 6 8 4 4 6 ... ## $ disp: int 13 13 6 16 23 15 23 12 10 14 ... 。两者都会给出相同的结果。

示例:

numeric

integer是一组很多类。 class double<?php $days = getOne("SELECT TODAYS('1960-01-12')"); 是其中两个子类。 R根据要求自动在不同的数字类之间进行转换。