R 值更改(避免0 1到1 2)

R 值更改(避免0 1到1 2),r,dplyr,tidyr,R,Dplyr,Tidyr,我想将因子转换为数值,以便能够将其平均值作为。数值改变值,数值不起作用 mtcars$vec <- factor(c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)) num.cols <- c("vec" ) mtcars[num.cols] <- lapply(mtcars[num.cols]

我想将因子转换为数值,以便能够将其平均值作为。数值改变值,数值不起作用

mtcars$vec <- factor(c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                                1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1))

        num.cols <- c("vec" ) 
        mtcars[num.cols] <- lapply(mtcars[num.cols], as.numeric) 
        str(mtcars)

        mtcars$vec

非常感谢您提前

我们需要先转换为字符,然后再转换为数值,因为如果我们直接将
应用为.numeric
,它将被强制转换为整数存储值,而不是从1开始的实际值。在本例中,由于值是二进制的,因此存在混淆

mtcars[num.cols] <-  lapply(mtcars[num.cols], 
              function(x) as.numeric(as.character(x))) 
mtcars$vec
#[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
mtcars[num.cols]
mtcars$vec
mtcars[num.cols] <-  lapply(mtcars[num.cols], 
              function(x) as.numeric(as.character(x))) 
mtcars$vec
#[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
mtcars[num.cols] <- lapply(mtcars[num.cols],  function(x) as.numeric(levels(x)[x]))
mtcars[[num.cols]] <- as.numeric(levels(mtcars[[num.cols]])[mtcars[[num.cols]]])
v1 <- factor(c(15, 15, 3, 3))
as.numeric(v1)
#[1] 2 2 1 1

as.numeric(as.character(v1))
#[1] 15 15  3  3