Как отобразить значения в R?

#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