我想知道是否有一种简单的方法可以找到两个命名向量的交集,并将结果输出到第三个命名向量。
在我的情况下,我有以下两个命名向量:
> 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的知识,上面的代码是通过一整天沉浸过程来学习的。有没有更简单的方法来做到这一点?
谢谢!
答案 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))]