2011-09-23 8 views
19

yo supongo que esto es un duplicado, pero no puedo encontrar que así que aquí va ...¿Obtiene el índice de los valores de un vector en otro?

me gustaría volver al índice de segundo en la primera:

first = c("a" , "c" , "b") 
second = c("c" , "b" , "a") 
result = c(2 , 3 , 1) 

garantizo que primero y segundo tienen valores únicos, y los mismos valores entre los dos.

Respuesta

30

Obtener índices de valores es para qué es match().

first = c("a" , "c" , "b") 
second = c("c" , "b" , "a") 
match(second, first) 
[1] 2 3 1 
+0

mdsummer - gracias! la segunda parte no era una pregunta, solo estaba indicando algunos límites al problema (editado para que quede más claro). tu solución funciona genial! – SFun28

+0

w00te: en las fuentes R, [R] \ src \ library \ base \ R \ match.R y [R] \ src \ main \ match.c – mdsumner

+0

pregunta clara, ¡respuesta clara! ¡¡Es un ejemplo muy lindo y muy raro !!! :-) +1 +1 – TMS

3

Estaba resolviendo el problema relacionado, seleccionando los elementos de un vector basado en un patrón. Digamos que tenemos el vector 'a' y nos gustaría encontrar las ocurrencias del vector 'b'. Se puede utilizar en el filtrado de tablas de datos mediante un patrón de búsqueda múltiple.

a=c(1, 1, 27, 9, 0, 9, 6, 5, 7) 
b=c(1, 9) 

match(a, b) 
[1] 1 1 NA 2 NA 2 NA NA NA 

So match() no es realmente útil aquí. La aplicación de operador binario% en% es más conveniente:

a %in% b 
[1] TRUE TRUE FALSE TRUE FALSE TRUE FALSE FALSE FALSE 

a[a %in% b] 
[1] 1 1 9 9 

realidad del partido() ayuda% en% es sólo una envoltura alrededor de la función match():

"%in%" <- function(x, table) match(x, table, nomatch = 0) > 0 
Cuestiones relacionadas