#r #plyr
Вопрос:
Добрый день ,
Предположим, что у нас есть следующее :
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 и не имеют реального смысла !
Спасибо вам за помощь !
Ответ №1:
Может быть, это проще?
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