为两个向量找到具有相同索引的相同元素

时间:2017-09-28 20:22:59

标签: r loops vector count

我正在寻找一种有效的方法来在两个向量中找到具有相同索引的相同元素并对它们进行计数。 说我有两个向量,我想知道有多少次实现[1,1] 所以如果我有两个向量(实际上它们会非常大),例如

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

我想要计算1在x和y的相同位置只出现一次。 我非常感谢你的帮助!

2 个答案:

答案 0 :(得分:0)

我们可以通过matrix cbind创建rowSums向量,检查它是否等于1,得到vector,如果两个向量在同一位置都有1,它将为2,如果只有一个1,则该值为1.因此,将其转换为逻辑==2==1sum)并使用{{1 }}

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

请注意,这也会检查1是'x'还是'y',而不仅仅是'x'

Reduce

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

请注意,这些解决方案可以扩展到多个vector而不只是两个

答案 1 :(得分:0)

对于那些正在寻找您迫切需要的快速tidyverse修复的人:

library(purrr)

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

对于指数:

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