簡體   English   中英

如何在R中以預定義的順序將因子轉換為數字

[英]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'並根據自定義順序指定levelslabels參數,並在轉換為'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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM