Актуализация от 2020 г.: plyr вече е оттеглен пакет и неговите официални насоки предлагат вместо това да се използва активно подобреният и поддържан пакет dplyr. Така че е за предпочитане да използвате само dplyr, в този случай dplyr::recode()
както в друг отговор, и да избягвате plyr изцяло.
За да използвате plyr::mapvalues()
с dplyr:
За да го използвате и да върнете data.frame с една колона:
mtcars %>%
transmute(cyl = plyr::mapvalues(cyl, c(4, 6, 8), c("a", "b", "c")))
Или ако искате един векторен изход, както във вашия работен пример, използвайте pull
:
mtcars %>%
pull(cyl) %>%
plyr::mapvalues(., c(4, 6, 8), c("a", "b", "c"))
Ако използвате dplyr и plyr едновременно, вижте тази бележка от dplyr readme:
Ще трябва да бъдете малко внимателни, ако зареждате едновременно plyr и dplyr. Бих препоръчал първо да заредите plyr, след това dplyr, така че по-бързите dplyr функции да са първи в пътя за търсене. Като цяло всяка функция, осигурена от dplyr и plyr, работи по подобен начин, въпреки че функциите на dplyr обикновено са по-бързи и по-общи.
Имайте предвид обаче, че можете да извикате mapvalues
с помощта на plyr::mapvalues
, ако dplyr е зареден, без да е необходимо да зареждате plyr.
person
Sam Firke
schedule
02.06.2015
mtcars %>% select(cyl) %>% .$cyl %>% plyr::mapvalues(c(4,6,8), c('a', 'b', 'c'))%>% as.data.frame()
- person akrun   schedule 18.01.2015.$cyl
? - person luciano   schedule 18.01.2015cyl
като вектор. Обикновено синтаксисът в dplyr е да се приложи функцията вътре вmutate
(както показа Ричард Скривън), но аз просто имитирах вашия код - person akrun   schedule 18.01.2015cyl
на.
Така че това решение само донякъде работи. - person luciano   schedule 18.01.2015mtcars %>% transmute(cyl = factor(cyl, labels = c("a", "b", "c")))
по подобен начин - person talat   schedule 18.01.2015mtcars %>% .$cyl %>% plyr::mapvalues(c(4,6,8), c('a', 'b', 'c')) %>% data.frame(cyl=.)
- person akrun   schedule 18.01.2015