Сводка комментариев:
В том случае, если ваши x
категории отсортированы именно так, как вы хотите их перечислить, используйте as.numeric(as.factor())
:
# example data
df <- data.frame(x = as.vector(sapply(LETTERS[1:7], paste0, 1:5)))
# new variable
df$y <- as.numeric(as.factor(df$x))
# note that you'd need to wrap it in as.character() if you want your numbers to be characters,
# not integers
Если вашданные не отсортированы, вы можете использовать car::Recode()
.
# install package if not already present
install.packages("car")
# new variable
df$z <- car::Recode(df$x, paste(paste0("'", levels(df$x), "' = '", 1:35, "'"), collapse = "; "))
# if you want your numbers to be integers, not characters, use this for the paste0():
# paste0("'", levels(df$x), "' = ", 1:35)
Вывод:
> df
x y z
1 A1 1 1
2 A2 2 2
3 A3 3 3
4 A4 4 4
5 A5 5 5
6 B1 6 6
7 B2 7 7
8 B3 8 8
9 B4 9 9
10 B5 10 10
11 C1 11 11
12 C2 12 12
13 C3 13 13
14 C4 14 14
15 C5 15 15
16 D1 16 16
17 D2 17 17
18 D3 18 18
19 D4 19 19
20 D5 20 20
21 E1 21 21
22 E2 22 22
23 E3 23 23
24 E4 24 24
25 E5 25 25
26 F1 26 26
27 F2 27 27
28 F3 28 28
29 F4 29 29
30 F5 30 30
31 G1 31 31
32 G2 32 32
33 G3 33 33
34 G4 34 34
35 G5 35 35
Классы объектов для примера кода:
> sapply(df, class)
x y z
"factor" "numeric" "factor"