Это происходит потому, что ваша переменная является фактором. Давайте посмотрим на более простой пример:
x = sample(letters, 1000, replace=TRUE)
df = data.frame(x=x)
table(df$x)
a b c d e f g h i j k l m n o p q r s t u v
47 45 45 34 37 37 38 43 33 34 38 35 30 41 41 43 32 39 41 47 37 44
w x y z
30 37 35 37
Получается, как мы и ожидаем. Но что если мы попытаемся добавить новые значения, используя ifelse
?
df$x = ifelse(df$x %in% letters[1:13], toupper(df$x), df$x)
table(df$x)
14 15 16 17 18 19 20 21 22 23 24 25 26 A B C D E F G H I
41 41 43 32 39 41 47 37 44 30 37 35 37 47 45 45 34 37 37 38 43 33
J K L M
34 38 35 30
Значения, которые мы сами кодировали toupper(df$x)
, представлены в строковом формате, но другие значения, которые были возвращены как есть, являются числовыми, что нам не нужно.
Чтобы это исправить, добавьте stringsAsFactors=FALSE
в ваш код, где вы читаете данные.
df = data.frame(x=x, stringsAsFactors=FALSE)
table(df$x)
a b c d e f g h i j k l m n o p q r s t u v
47 45 45 34 37 37 38 43 33 34 38 35 30 41 41 43 32 39 41 47 37 44
w x y z
30 37 35 37
df$x = ifelse(df$x %in% letters[1:13], toupper(df$x), df$x)
table(df$x)
A B C D E F G H I J K L M n o p q r s t u v
47 45 45 34 37 37 38 43 33 34 38 35 30 41 41 43 32 39 41 47 37 44
w x y z
30 37 35 37