сбросить значения для переменной в r, большой набор данных - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь найти краткий способ записи условия новой переменной для другой переменной.более конкретно, предположим, что переменная «x» имеет 5 категорий для каждой буквы от A до G, то есть A1,A2,...,A5, B1,B2,...,B5,...,G5, что в сумме составляет 35 категорий, и мы хотим создать новую переменную «y» с целыми числами от 1 до 35 для переменной »x ".

это то, что я сделал

y <- revalue(df$x, c("A1"="1","A2"="2","A3"="3","A4"="4","A5"="5",                                                               "B1"="6","B2"="7","B3"="8","B4"="9","B5"="10",
"C1"="11","C2"="12","C3"="13","C4"="14","C5"="15",
"D1"="16","D2"="17","D3"="18","D4"="19","D5"="20", ...))

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

В соответствии с @Roland этот код должен это делать:

# create your data frame, note that the variable automatically becomes a factor.
df <- data.frame(x = sort(paste0(rep(LETTERS[1:7],5), 1:5)))
str(df)

# Returns the factor level as an integer
df$y <- as.integer(df$x)

При работе с факторами следует соблюдать осторожность и проверять, чтобы ваши уровни находились в правильном порядке (A1 -> 1, A2-> 2 и т. Д.).

0 голосов
/ 24 мая 2018

Сводка комментариев:

В том случае, если ваши 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" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...