2015-12-08 164 views
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 

但我想Y的所有元素比較x的特定元素,像

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

這可能嗎?

+0

你想'%in%'嗎? %x% – 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 如果要在x和y分量使用索引:

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

理解,但我正在工作更多的元素,如200,我如何找到向量y中所有TRUE值的位置,例如,y [1]和y [2]爲真,所以我可以提取。 – AnesG

+0

查看更新。訣竅是使用'which' – Rentrop

1

如果要每個元素比較x到y,通常其中一個'apply'函數會有所幫助。

如下:

X < - C(1:10)

ý< - C(10,11,12,13,14,1,7)

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

輸出中的第i列是x [i] == y的結果。

這是你在找什麼?