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