【问题标题】:Removing values from a vector that are not duplicated at least x number of times从向量中删除至少不重复 x 次的值
【发布时间】:2015-08-24 16:28:00
【问题描述】:

给定一个向量:

例如:

a = c(1, 2, 2, 4, 5, 3, 5, 3, 2, 1, 5, 3)

使用a[a%in%a[duplicated(a)]] 我可以删除不重复的值。但是,它只适用于只出现一次的值。

我将如何继续删除这三次中不存在的所有值? (或更多,在其他情况下)

预期的结果是:

2 2 5 3 5 3 2 5 3

删除了 1 和 4,因为它们只出现了两次和一次

【问题讨论】:

    标签: r duplicates unique duplicate-removal


    【解决方案1】:

    您可以使用ave 函数在一行中完成此操作:

    a[ave(a, a, FUN=length) >= 3]
    # [1] 2 2 5 3 5 3 2 5 3
    

    ave(a, a, FUN=length) 的调用返回,对于向量a 中的每个元素a[i]a[i]a 中出现的总次数。然后你可以子集a,限制在总次数为3或更多的索引。

    【讨论】:

      【解决方案2】:

      相当简单(比使用ave 更长,但可能更易于理解):

      x <- c(1,2,2,4,5,3,5,3,2,1,5,3)
      tt <- table(x)   ## tabulate
      ## find relevant values
      ttr <- as.numeric(names(tt)[tt>=3])
      x[x %in% ttr]  ## subset
      

      【讨论】:

      • a[a %in% sort(unique(a))[table(a)&gt;=3]] 作为主题的变体。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 2012-07-04
      • 2021-06-12
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多