【问题标题】:Intersection of two named vectors saved as new named vector in RR中保存为新命名向量的两个命名向量的交集
【发布时间】:2014-03-11 13:41:44
【问题描述】:

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

就我而言,我有以下两个命名向量:

> 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]]]) }

这给了我以下结果:

测试3 [1] 462 948 573

由于我只知道一点 python 而对 R 几乎一无所知,所以上面的代码是通过一整天的沉浸过程学习的。有没有更直接的方法来做到这一点?

谢谢!

【问题讨论】:

    标签: r vector intersection named


    【解决方案1】:

    我想你想返回 test1 对象的值:

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

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

    【讨论】:

    • 哇。非常感谢您的回答和解释——这正是我想要的。非常感谢!
    • @Kvothe,不客气。我很乐意提供帮助。如果其中一个答案解决了您的问题,请考虑通过单击答案旁边的复选标记来接受它:meta.stackexchange.com/questions/5234/…
    • 谢谢。对不起,我忘了接受答案——这是我在这里的第一篇文章。干杯!
    【解决方案2】:
    library(dplyr)
    
    test3 <- join(test1, test2)[, intersect(names(test1), names(test2))]
    

    【讨论】:

    • 也感谢您的回答!
    • 没问题!这就是板子的用途! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多