Как преобразовать категориальную переменную в несколько фиктивных переменных в R? - PullRequest
0 голосов
/ 20 апреля 2020

Здесь у меня есть набор данных с именем столбца как Возраст = (24 или младше, от 25 до 34, от 35 до 44, от 45 до 54, от 25 до 34, 24 или младше, от 35 до 44, от 25 до 34, от 45 до 54)

Теперь мне нужно преобразовать значения для категориальной переменной «Возраст» следующим образом: 24 или меньше равно 1, 25–34 равно 2, 35–44 равно 3, 45–54 равно 4

Может ли кто-нибудь помочь мне здесь?

Большое спасибо заранее.

Ответы [ 4 ]

2 голосов
/ 20 апреля 2020

Вы можете использовать вложенные 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
1 голос
/ 20 апреля 2020

Как описано pieterbons , ваше поле Age уже практически является фактором. Если вы преобразуете возраст в тип числительного c, ваши данные будут представлены в числовых категориях c.

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
0 голосов
/ 20 апреля 2020

Если вам нужна фиктивная переменная (ie 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))

Если вы хотите цифру c вместо этого, код вашей переменной как 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)
0 голосов
/ 20 апреля 2020

Если ваш столбец Age является фактором, это фактически автоматически происходит за экраном (каждое значение сохраняется как целое число и имеет соответствующую текстовую метку). Чтобы явно получить эти целые числа, вы можете использовать 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)

. Вы можете столкнуться с проблемами сортировки, если уровни должны иметь порядок, отличный от исходного. В этом случае вы можете явно установить уровни фактора.

...