Значения карты Plyr для переименования уровней дают неожиданный результат - PullRequest
0 голосов
/ 29 мая 2019

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

x <- c("a", "b", "c","c","d","a")
y <- c("a", "c", "c","d","d","b")
z<-data.frame(cbind(x,y))

levels(z$y)<-mapvalues(z$y, c("a", "c","b"), c("A", "C","m"))
levels(z$x)<-mapvalues(z$x, c("a", "c","b"), c("A", "C","m"))

Ответ:

>z
x y
1 A A
2 m C
3 C C
4 C d
5 C d
6 A C

Как видно, $x[5] должно быть "d", а $y[6] должно быть "m". Я также попытался применить векторы "as.character" к "от" "до", но это тоже не сработало. Я работаю в RStudio, версия для Mac, версия R 3.5.2 (2018-12-20) - «Eggshell Igloo». Спасибо за помощь.

1 Ответ

1 голос
/ 29 мая 2019

Если мы посмотрим на вывод

plyr::mapvalues(z$y, c("a", "c","b"), c("A", "C","m"))
#[1] A C C d d m
#Levels: A m C d

Это вектор такой же длины, что и 'x', а длина levels отличается

Если мы присвоим этовывод на levels(z$y) `, есть разница в длине.Мы можем либо выполнить присвоение всему столбцу

z$y <- plyr::mapvalues(z$y, c("a", "c","b"), c("A", "C","m"))

, либо заменить levels на соответствующий levels

levels(z$y) <- levels(plyr::mapvalues(z$y, c("a", "c","b"), c("A", "C","m")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...