簡體   English   中英

如何在 R 中將一個分類變量轉換為多個虛擬變量?

[英]How do convert a categorical variable into multiple dummy variables in R?

在這里,我有一個列名為 Age = (24 或以下、25 到 34、35 到 44、45 到 54、25 到 34、24 或以下、35 到 44、25 到 34、45 到 54) 的數據集

現在我需要將分類變量“Age”的值轉換如下:24 或以下等於 1、25 到 34 等於 2、35 到 44 等於 3、45 到 54 等於 4

有人能幫我一下嗎?

提前謝謝了。

您可以使用嵌套ifelse語句:

set.seed(12)
df <- data.frame(Age = c(sample(c("24 or under", "25 to 34", "35 to 44", "45 to 54"), 20, replace = T)))
df$Age_new <- ifelse(df$Age == "24 or under", 1,
                     ifelse(df$Age == "25 to 34", 2,
                            ifelse(df$Age == "35 to 44", 3, 4)))

結果:

df
           Age Age_new
1     25 to 34       2
2     35 to 44       3
3  24 or under       1
4     45 to 54       4
5  24 or under       1
6     35 to 44       3
7     45 to 54       4
8     25 to 34       2
9     45 to 54       4
10    35 to 44       3
11 24 or under       1
12    35 to 44       3
13    25 to 34       2
14 24 or under       1
15    25 to 34       2
16    35 to 44       3
17    25 to 34       2
18    25 to 34       2
19    35 to 44       3
20    25 to 34       2

正如pieterbons所描述的,您的 Age 字段實際上已經是一個因素。 如果您將 Age 轉換為數字類型,您將擁有數字類別中的數據。

df <- data.frame(Age = c("24 or under", "25 to 34", "35 to 44", "45 to 54"))
df$Age <- as.numeric(df$Age)

您還可以按照您的描述使用 Age 字段的虛擬代碼創建一個新字段(如果您有一個要轉換為因子但順序非常不同的字符串變量,此選項將特別有用),有多個方法:

# 1) Base R
df$age_new <- as.numeric(df$Age)


# 2) dplyr
library(dplyr)
df <- df %>% 
  mutate(Age = case_when(Age == "24 or under" ~ 1,
                         Age == "25 to 34"    ~ 2,
                         Age == "35 to 44"    ~ 3, 
                         TRUE                 ~ 4))

#> df
#          Age age_new
#1 24 or under       1
#2    25 to 34       2
#3    35 to 44       3
#4    45 to 54       4

如果您的列 Age 是一個因素,這實際上會自動發生在屏幕后面(每個值都存儲為 integer 並具有相應的文本標簽)。 要顯式獲取這些整數,您可以使用as.numeric()

df <- data.frame(Age = c("24 or under", "25 to 34", "35 to 44", "45 to 54"))

df$Age_cat <- as.numeric(df$Age)

如果級別的順序與原始順序不同,您可能會遇到排序問題。 在這種情況下,您可以明確設置因子的水平。

如果您想要一個虛擬變量(即 0 或 1),您可以使用dplyr::if_else語句為每個類別創建一個新變量:

library(dplyr)

Age = c("24 or under", "25 to 34", "35 to 44", "45 to 54")
data.frame(age = Age) %>%
    mutate("24 or under" = if_else(age == Age[1], 1, 0),
           "25 to 34"    = if_else(age == Age[2], 1, 0),
           "35 to 44"    = if_else(age == Age[3], 1, 0),
           "45 to 54"    = if_else(age == Age[4], 1, 0))

如果您想要一個數值,請將您的變量編碼為factor ,按您想要的順序設置級別,然后使用as.numeric

Age = factor(c("24 or under", "25 to 34", "35 to 44", "45 to 54"),
         levels = c(c("24 or under", "25 to 34", "35 to 44", "45 to 54")))

as.numeric(Age)

暫無
暫無

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

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