Подтвердить что ты не робот

Получить индекс значений одного вектора в другом?

Я бы предположил, что это дубликат, но я не могу найти, что так происходит...

Я хотел бы сначала вернуть индекс второго:

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

Я гарантирую, что первый и второй имеют уникальные значения и одинаковые значения между ними.

4b9b3361

Ответ 1

Получение индексов значений для match().

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

Ответ 2

Я решал связанную проблему, выбирая элементы вектора на основе шаблона. Допустим, у нас есть вектор "а", и мы хотели бы найти вхождения вектора "b". Может использоваться для фильтрации таблиц данных путем умножения шаблонов поиска.

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

Так что match() здесь не очень полезно. Применение бинарного оператора% в% более удобно:

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

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

На самом деле из match() help% in% - это просто обход вокруг функции match():

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