2017-09-28 75 views
-1

我正在尋找一種有效方法來查找兩個矢量中具有相同索引的相同元素並對它們進行計數。 說我有兩個向量和我想知道有多少次我不得不實現[1,1] 所以,如果我有兩個向量(在實踐中,他們會非常大),例如查找兩個矢量具有相同索引的相同元素

x=c(2,1,8,1,4) 
y=c(9,1,8,0,4) 

我想要指出1在x和y的相同位置只出現一次。 我會非常感謝您的幫助!

+3

感覺就像我錯過了一些東西,但不是這只是'sum(x == y&x == 1)'? – Henrik

+1

我檢查過了,它並沒有計算出所有在比較向量時給出(1,1)的相同條目。 akrun的簡化方法完美地工作 – Arbiturka

+2

@Arbiturka這很有趣...他們看起來在邏輯上相當,但也許浮點數學是干涉。你能給個例子嗎? – Frank

回答

0

我們可以通過cbind荷蘭國際集團的載體創建matrix,檢查它是否等於1,拿到rowSums,如果這兩個向量在相同的位置有1,這將是2,如果只有一個1,該值將是1。因此,它與sum

sum(rowSums(cbind(x, y)==1)==2) 
sum(rowSums(cbind(x, y)==1)==1) 

注意,這也檢查1是否是「X」或「Y」轉換爲邏輯vector==2==1),並獲得數並且不僅在'x'中


或用Reduce

sum(Reduce(`&`, lapply(list(x, y), `==`, 1))) 

注意,這些解決方案可以擴展到多個vector s,而不是隻有兩個

0

對於那些尋找一個快速tidyverse修復,你迫切需要的:

library(purrr) 

map(list(x, y), ~.== 1) %>% reduce(., `&`) %>% sum 

對於指數:

map(list(x, y), ~.== 1) %>% reduce(., `&`) %>% which 
相關問題