使用Plyr映射值重命名级别会产生意外结果

时间:2019-05-29 18:15:36

标签: r

我正在尝试使用mapvalues重命名一长列的因子。由于似乎无法正常工作,我制作了一个简单的示例来说明问题。

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”应用于“ from”“ to”向量,但是它也不起作用。我正在使用RStudio,Mac版本,R版本3.5.2(2018-12-20)-“ Eggshell Igloo”。感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果我们看一下

的输出
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")))