两个命名向量的交集在R中保存为新的命名向量

时间:2014-03-11 13:41:45

标签: r vector intersection named

我想知道是否有一种简单的方法可以找到两个命名向量的交集,并将结果输出到第三个命名向量。

在我的情况下,我有以下两个命名向量:

> test1
ATMG00010 ATMG00030 ATMG00040 ATMG00050 ATMG00060 ATMG00070 
  462       324       948       396       542       573 

> test2
ATMG00010 ATMG00040 ATMG00070 
    0         0         0 

根据名称找到两个向量的交集,然后将test1的名称,值对输出到一个新的命名向量test3中的优雅方法是什么?

即,

> test3
ATMG00010  ATMG00040 ATMG00070 
  462         948       573 

为了让我继续生活,我找到了一个完成工作的中间解决方案,但结果不是命名向量,只是test1中匹配名称的值的数值向量。

matched <- which(names(test1) %in% names(test2))
test3 <- rep(NA, length(test2))
for (i in 1:length(matched)) { test3[i] <- c(test1[[matched[i]]]) }

这给了我以下结果:

  

TEST3       [1] 462 948 573

由于我只知道一点python而且几乎没有关于R的知识,上面的代码是通过一整天沉浸过程来学习的。有没有更简单的方法来做到这一点?

谢谢!

2 个答案:

答案 0 :(得分:3)

我认为你想要返回test1对象的值:

test3 <- test1[intersect(names(test1),names(test2))]

intersect()输出一个字符串,其中两个向量之间共享名称。通过将结果字符串包装在方括号中,我们可以返回任何向量的匹配元素,在本例中为test1

答案 1 :(得分:1)

library(dplyr)

test3 <- join(test1, test2)[, intersect(names(test1), names(test2))]