Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to extract elements from vector using another vector with non unique values?

I have two vectors:

duplicated_q <- c(q142 = "q42", q143 = "q43", q144 = "q44", q145 = "q45", q146 = "q46", 
q192 = "q42", q193 = "q43", q194 = "q44", q195 = "q45", q196 = "q46", 
q197 = "q47", q198 = "q48", q199 = "q49", q200 = "q50", q201 = "q51")

modified_q <- c(q42 = "q22", q42 = "q32", q43 = "q23", q43 = "q33", q44 = "q24", 
q44 = "q34", q45 = "q25", q45 = "q35", q46 = "q26", q46 = "q36", 
q47 = "q27", q48 = "q28", q49 = "q29", q50 = "q30", q51 = "q31"
)

> duplicated_q
q142  q143  q144  q145  q146  q192  q193  q194  q195  q196  q197  q198  q199  q200  q201 
"q42" "q43" "q44" "q45" "q46" "q42" "q43" "q44" "q45" "q46" "q47" "q48" "q49" "q50" "q51"

> modified_q
q42   q42   q43   q43   q44   q44   q45   q45   q46   q46   q47   q48   q49   q50   q51 
"q22" "q32" "q23" "q33" "q24" "q34" "q25" "q35" "q26" "q36" "q27" "q28" "q29" "q30" "q31"

I need to extract from modified_q using duplicated_q with repeated values. This construction is wrong:

> modified_q[duplicated_q]
  q42   q43   q44   q45   q46   q42   q43   q44   q45   q46   q47   q48   q49   q50   q51 
"q22" "q23" "q24" "q25" "q26" "q22" "q23" "q24" "q25" "q26" "q27" "q28" "q29" "q30" "q31" 

How to get vector below?

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

  q42   q43   q44   q45   q46   q42   q43   q44   q45   q46   q47   q48   q49   q50   q51 
"q22" "q23" "q24" "q25" "q26" "q32" "q33" "q34" "q35" "q36" "q27" "q28" "q29" "q30" "q31" 

>Solution :

You could use pmatch() which has an argument duplicates.ok(default to FALSE) that controls if elements matched against should be used more than once.

modified_q[pmatch(duplicated_q, names(modified_q))]

#   q42   q43   q44   q45   q46   q42   q43   q44   q45   q46   q47   q48   q49   q50   q51
# "q22" "q23" "q24" "q25" "q26" "q32" "q33" "q34" "q35" "q36" "q27" "q28" "q29" "q30" "q31"
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading