如何映射 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
下午好,
假设我们有以下内容:
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