R中多个向量中常见元素的索引

时间:2017-08-02 18:15:18

标签: r vector

从其他堆栈溢出帖子中,我发现以下代码可用于查找多个向量之间的公共值(例如a,b):

Reduce(intersect, list(a,b,...))

我无法找到从矢量中获取共同价值指数的好方法。任何帮助将不胜感激。

以下是所需输入和输出的示例:

a <- c(5,2)
b <- c(5,3)
d <- c(4,5)

a和b之间的公共值索引应为1,因为两个向量在该索引处都有5。为了找到a和d之间的公共值索引,该方法应该返回1表示a,2表示d。

1 个答案:

答案 0 :(得分:1)

a <- c(5,2); b <- c(5,3); d <- c(4,5)
mylist = list(a = a, b = b, d = d)  #OR  mylist = mget(c("a", "b", "d"))
common_values = Reduce(intersect, mylist)
lapply(mylist, function(x) which(x %in% common_values))
#$a
#[1] 1

#$b
#[1] 1

#$d
#[1] 2

当可以存在多个常用值时,您不清楚如何解决,但这是一种方式

a = 1:3
b = 2:4
d = c(2, 7, 3, 5)
mylist = mget(c("a", "b", "d"))
common_values = Reduce(intersect, mylist)
lapply(mylist, function(x)
    sapply(setNames(common_values, common_values), function(y)
        which(x %in% y)))
#$a
#2 3 
#2 3 

#$b
#2 3 
#1 2 

#$d
#2 3 
#1 3