首页 文章

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

提问于
浏览
0

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

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

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

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

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

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

1 回答

  • 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
    

相关问题