簡體   English   中英

R 分類變量到數字有序值

[英]R Categorical Variables to numeric ordered values

我有一個大型數據集,其中 3 個變量按 9 個類別進行編碼,例如“非常糟糕”到“非常好”。 我需要把這些變成適合分析的數字。 我被建議使用as.numeric() ,但是,這會將數字 1-9 隨機分配給比例,而不是反映原始比例順序。 例如,“公平”應該放在中間,排在第 5 位,但被隨機分配到 2。

您可以使用包含所有代碼及其值的重新編碼列表。 然后,您可以將列應用於此列表以獲取值:

recode_as = list("bad"=-1,
                 "neutral"=0,
                 "good"=1)

data = data.frame(6:10,
                  "A"=c("good","good","neutral","bad","bad"),
                  "B"=c("bad","good","bad","good","neutral"),
                  "C"=c("good","good","good","good","bad"))

data$A = unlist(recode_as[as.character(data$A)])
data$B = unlist(recode_as[as.character(data$B)])
data$C = unlist(recode_as[as.character(data$C)])

改造前數據:

  X6.10       A       B    C
1     6    good     bad good
2     7    good    good good
3     8 neutral     bad good
4     9     bad    good good
5    10     bad neutral  bad

轉換后的數據:

  X6.10  A  B  C
1     6  1 -1  1
2     7  1  1  1
3     8  0 -1  1
4     9 -1  1  1
5    10 -1  0 -1

這是一個示例來說明問題,並提供了一種解決方案。

假設您的數據框中有一列是一個因素( item1 ):

df <- data.frame(
  item1 = c("extremely bad", "good", "bad", "very good", "bad", "very bad"),
  stringsAsFactors = TRUE
)

如果您只在item1列上使用as.numeric ,您將擁有:

as.numeric(df$item1)
[1] 2 3 1 5 1 4

這對應於您看似隨機(但實際上是按字母順序)的因子水平:

levels(df$item1)
[1] "bad"           "extremely bad" "good"          "very bad"      "very good"

相反,您應該明確指定級別的順序:

as.numeric(factor(df$item1, levels = c("extremely bad", 
                                       "very bad", 
                                       "bad", 
                                       "neutral", 
                                       "good", 
                                       "very good", 
                                       "extremely good")))
[1] 1 5 3 6 3 2

在這種情況下,“非常糟糕”在級別的順序中排在第一位,因此編碼為 1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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