[英]How to convert a factor to numeric in a predefined order in R
我有一个因子列,有三个值:“b”,“c”和“free”。
我做到了
df$new_col = as.numeric (df$factor_col)
但它会将“b”转换为1,将“c”转换为2,将“free”转换为3。
但我想将“free”转换为0,将“b”转换为2,将“c”转换为5.我怎样才能在R中执行此操作?
非常感谢
f <- factor(c("b", "c", "c", "free", "b", "free"))
您可以尝试重命名因子级别,
levels(f)[levels(f)=="b"] <- 2
levels(f)[levels(f)=="c"] <- 5
levels(f)[levels(f)=="free"] <- 0
> f
#[1] 2 5 5 0 2 0
#Levels: 2 5 0
一种选择是再次调用'factor'并根据自定义顺序指定levels
和labels
参数,并在转换为'character'或通过levels
后更改为numeric
df$new_col <- as.numeric(as.character(factor(df$factor_col,
levels=c('b', 'c', 'free'), labels=c(2, 5, 0))))
另一种选择是从library(car)
recode
。 输出将是factor
类。 如果我们需要转换为'numeric',我们可以像之前的解决方案那样执行此操作( as.numeric(..
)。
library(car)
df$new_col <- with(df, recode(factor_col, "'b'=2; 'c'=5; 'free'=0"))
df <- data.frame(factor_col= c('b', 'c', 'b', 'free', 'c', 'free'))
您可以使用以下方法创建新列:
# an example data frame
f <- data.frame(factor_col = c("b", "c", "free"))
# create new_col
f <- transform(f, new_col = (factor_col == "b") * 2 + (factor_col == "c") * 5)
结果( f
):
factor_col new_col
1 b 2
2 c 5
3 free 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.