将plyr::mapvalues与dplyr一起使用

将plyr::mapvalues与dplyr一起使用,r,dataframe,plyr,dplyr,R,Dataframe,Plyr,Dplyr,plyr::mapvalues的使用方法如下: mapvalues(mtcars$cyl, c(4, 6, 8), c("a", "b", "c")) 但这不起作用: mtcars %>% dplyr::select(cyl) %>% mapvalues(c(4, 6, 8), c("a", "b", "c")) %>% as.data.frame() 如何将plyr::mapvalues与dplyr一起使用?或者更好的是,dplyr的等价物是什么?2020年更新:plyr

plyr::mapvalues的使用方法如下:

mapvalues(mtcars$cyl, c(4, 6, 8), c("a", "b", "c"))
但这不起作用:

mtcars %>%
dplyr::select(cyl) %>%
mapvalues(c(4, 6, 8), c("a", "b", "c")) %>%
as.data.frame()
如何将plyr::mapvalues与dplyr一起使用?或者更好的是,dplyr的等价物是什么?

2020年更新:plyr现在是一个退役的软件包,其官方指南建议使用积极改进和维护的dplyr软件包。因此,最好只使用dplyr,在本例中,dplyr::像中一样重新编码,并完全避免使用plyr

要将plyr::mapvalues与dplyr一起使用,请执行以下操作:

要使用它并返回一列data.frame,请执行以下操作:

mtcars %>%
  transmute(cyl = plyr::mapvalues(cyl, c(4, 6, 8), c("a", "b", "c")))
或者,如果您想要单矢量输出,如工作示例中所示,请使用pull:

如果同时使用dplyr和plyr,请参阅以下说明:

如果同时加载plyr和dplyr,则需要小心一点 同时。我建议先加载plyr,然后加载dplyr,这样 更快的dplyr函数首先出现在搜索路径中。顺便 大型,dplyr和plyr提供的任何功能都以类似的方式工作 尽管dplyr函数往往更快、更通用


但是请注意,如果在不需要加载plyr的情况下加载dplyr,则可以使用plyr::mapvalues调用mapvalues。

问题也提到了这一点

或者更好的是,dplyr的等效值是多少

等价物被重新编码

这会将值1映射为男性,将值2映射为女性

我是一个沉重的plyr::mapvalues用户。我使用它来用新值替换字符串中的旧值。比如:

设定种子1 数据[1]A D A B E C C C A E B B。。。 如果我错了,请纠正我,但没有一种同样简洁的dplyr方法可以做到这一点。但是,您仍然可以使用dplyr::recode执行此操作:

dplyr::recodedata$name!!!设置名称检查列表$new,检查列表$old >[1]A D A B E C C C A E B B B。。。 如中所述,命名向量的顺序是old name=new value,这与dplyr::mutate和dplyr::rename函数在编写时的顺序相反,可能在以后会得到修复


添加这个作为一个答案,因为我一直在谷歌上搜索如何做,当我忘记了,不能很快找到答案。也许现在我可以。根据函数文档中的最后两行示例修改解决方案。

尝试mtcars%%>%selectcyl%%>%。$cyl%%>%plyr::mapvaluesc4,6,8,c'a','b',c%%>%as.data.frameOr mtcars%%>%mutatex=mapvaluescyl,c4,6,8,ca,b,c%%>%SelectX有效。$cyl做什么?你可以使用mtcars%>%transmutecyl=factorcyl,labels=ca,b,csimilarly@luciano您可以将以前的代码更改为mtcars%%>%。$cyl%%>%plyr::mapvaluesc4,6,8,c'a',b',c%%>%data.framecyl=。
mtcars %>%
  pull(cyl) %>%
  plyr::mapvalues(., c(4, 6, 8), c("a", "b", "c"))
name <- c("John", "Clara", "Smith")
sex <- c(1,2,1)
age <- c(30,32,54)
df <- data.frame(name,sex,age)
df %>% mutate(sex=recode(sex,
`1`="Male",
`2`="Female"))