【问题标题】:Find duplicated values from list o vector in R在R中查找从列表到向量的重复值
【发布时间】:2014-08-22 18:13:46
【问题描述】:

我有这个示例数据

a<-c(1,5,7,8,10,15)
b<-c(2,6,7,9,10,20,31)

我需要找到重复的值(两个向量中的值)并创建包含这些数字的新向量。它应该看起来像

c<-c(7,10)

由于向量长度不同,我试图将它们放入向量列表中

l<-list(a=a,b=b)

试过了

duplicated(l)

duplicated(a,b)

但它给出了无意义的输出。我正在寻找正确的解决方案,但我仍然找不到。有什么建议吗?

【问题讨论】:

  • 您下面的 cmets 表明您可能同时查看 2 个以上的向量。如果是这样,“重复”是指出现在所有向量中的东西,还是只是出现在多个向量中的东西?
  • 这意味着它出现在所有这些中。希望我有大约 10 个向量,所以我现在通过相交添加另一个向量来一步一步地做到这一点。我需要继续我的工作,我很乐意找到有效的解决方案,但我今天无法继续工作。
  • @Arun 对Reduce(intersect, my_list) 的建议就是你想要的。

标签: r vector


【解决方案1】:

看起来像是 intersect() 的工作

a<-c(1,5,7,8,10,15)
b<-c(2,6,7,9,10,20,31)
c<-intersect(a,b)
c
[1]  7 10

【讨论】:

  • 我看到这个函数不起作用应该有第三个向量。是吗?
  • 上面的示例代码在基础 R 中完美运行。我能想象的唯一让它对你不起作用的是,如果它被不同的包掩盖。试试base::intersect(a,b)。我是否正确理解了您的评论?
  • +1,但我认为他是在暗示他可能要检查第三个向量是否重复(或更一般地说,n 个向量)。
  • 啊。如果是这样,他需要澄清这种情况下的“重复”是否意味着出现在所有三个向量中或不止一个向量中。
  • Reduce(intersect, my_list)??
【解决方案2】:
c(a, b)[duplicated(c(a, b))]

产生:

[1]  7 10

duplicated 应用于向量返回一个相同长度的逻辑向量,TRUE 表示向量中早先出现的每个值。您可以使用它来对原始向量进行子集化。

请注意,如果您不在乎值是否在单个向量中重复,那么您应该这样做:

a.b <- c(unique(a), unique(b))
a.b[duplicated(a.b)]

【讨论】:

  • 谢谢,我不在乎,因为我已经删除了每个向量中的重复值。
【解决方案3】:

保持在原问题的范围内,

你可以使用match

> b[!is.na(match(a, b))]
# [1]  7 10

或者更简单地说,%in%

> b[a %in% b]
# [1]  7 10

【讨论】:

  • +1,有趣的是intersect 在内部使用match
  • @BrodieG - 谢谢。 IMO,这正是%in% 的用途:-)
【解决方案4】:

通过创建类似函数来解决

duplicated_values<-function(x){
if(x%in%b){
return(x)
}
}
values<-mclapply(c(1:length(a)),duplicated_values)

【讨论】:

    猜你喜欢
    • 2015-03-31
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 2018-10-15
    • 1970-01-01
    • 2020-04-27
    相关资源
    最近更新 更多