[英]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.