如何映射 R 中的值?

How to map values in R?

下午好,

假设我们有以下内容:

library(plyr)

obs=c(1,4,4,5,6,7,8,3,3)

from_v1=unique(obs)

to_v2=c(11,44,55,66,77)  #  1 --> 11 , 4 ---> 44 , 5 --->55 etc 

mapvalues(obs, from = from_v1, to = to_v2 )

这里我愿意贴图:

1 -->  11
4 ---> 44 
5 ---> 55
6 ---> 66
7 ---> 77

但是,8 和 3 没有图像(映射值)。

在这种情况下,我只需要将值映射到自身(8 --- > 8 和 3 --- > 3)。

之前的代码给出了这个错误:

Error in mapvalues(obs, from = from_v1, to = to_v2) : 
  `from` and `to` vectors are not the same length.
Execution halted

此外,使用的值(7 --> 77 等)只是我用来简化 pb 的特殊示例,没有实际意义!

感谢您的帮助!

也许这样更简单?

dplyr::coalesce(to_v2[match(obs, from_v1)], obs)
#[1] 11 44 44 55 66 77  8  3  3

如果您想继续使用 plyr::mapvalues 将剩余的值追加到值。

obs = c(1,4,4,5,6,7,8,3,3)
from_v1 = unique(obs)
to_v2 = c(11,44,55,66,77)
to_v2 = c(to_v2, tail(from_v1, length(from_v1) - length(to_v2)))

plyr::mapvalues(obs, from = from_v1, to = to_v2 )
#[1] 11 44 44 55 66 77  8  3  3