2015-12-08 5 views
1

Мне интересно, как я могу сравнить 1 элемент вектора со всеми элементами в другом векторе. В качестве примера: предположим,Сравнение значений векторов: 1 элемент со всеми остальными

x <- c(1:10) 
y <- c(10,11,12,13,14,1,7) 

Теперь я могу сравнить элементы parewise

x == y 
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 

Но я хочу, чтобы сравнить все элементы у с определенным элементом х, что-то вроде

x[7] == y 
[1] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 

Возможно ли это?

+0

Вы хотите '% in%'? 'x% in% y' – jeremycg

ответ

4

Вы имеете в виду что-то вроде этого?

x <- 1:10 
y <- c(10,7,11,12,13,14,15,16,17,18) 
res <- outer(x, y, `==`) 
colnames(res) <- paste0("y=", y) 
rownames(res) <- paste0("x=", x) 

Который дает следующую матрицу:

 y=10 y=7 y=11 y=12 y=13 y=14 y=15 y=16 y=17 y=18 
x=1 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
x=2 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
x=3 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
x=4 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
x=5 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
x=6 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
x=7 FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
x=8 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
x=9 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
x=10 TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 

Если вы хотите dimnames быть в y[1] использования

colnames(res) <- paste0("y[", seq_along(y), "]") 
rownames(res) <- paste0("x[", seq_along(x), "]") 

, который дает вам:

 y[1] y[2] y[3] y[4] y[5] y[6] y[7] y[8] y[9] y[10] 
x[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
x[2] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
x[3] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
x[4] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
x[5] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
x[6] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
x[7] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
x[8] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
x[9] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
x[10] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 

Для получить индекс использования which следующим образом:

which(res) 
[1] 10 17 

Как R сохраняет матрицы построчно это приводит к 10 и 17. Если вы хотите, чтобы индекс в х и у компонента использования:

which(res, arr.ind = TRUE) 
    row col 
x=10 10 1 
x=7 7 2 
+0

Понял, но я работаю больше элементов, например 200, как я могу найти местоположение всех ИСТИННЫХ значений в векторе y, например y [1] и y [2], ИСТИНА, поэтому i может извлечь тогда. – AnesG

+0

См. Обновление. Фокус в том, чтобы использовать 'which' – Rentrop

1

Если вы хотите сравнить каждый элемент от x до y, обычно одна из функций «apply» поможет.

Как следует:

< х - с (1:10)

< у - с (10,11,12,13,14,1,7)

sapply (x, function (z) {z == y})

Столбец i на выходе получается из x [i] == y.

Это вы что искали?

Смежные вопросы