2017-09-28 78 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 
相关问题