【问题标题】:keep numbers of a vector that recurr more than 3 times保留重复次数超过 3 次的向量的数字
【发布时间】:2015-04-22 22:52:22
【问题描述】:

我有这样的向量:c(1, 1, 1, 1, 5, 7, 7, 7, 7, 7)。 我想做的是只保留那些在这个向量中出现超过三次的元素。在这种情况下,我想获得以下向量 c(1, 1, 1, 1, 7, 7, 7, 7, 7) 有没有聪明的方法来实现这一目标? 提前致谢

【问题讨论】:

  • 向量排序好了吗?
  • 是的,奥斯曼,向量已经排序了

标签: r vector


【解决方案1】:

有很多方法可以做到这一点,其中一种是:

a <- c(1, 1, 1, 1, 5, 7, 7, 7, 7, 7)
a[a %in% unique(a)[table(a)>3]]

使用unique(a)[table(a)&gt;3],您只选择向量中出现次数超过 3 次的元素。

其余的应该是直截了当的

【讨论】:

    【解决方案2】:

    试试rle

    rl <- rle(v1)
    indx <- rl$lengths >3 
    rep(rl$values[indx], rl$lengths[indx])
    #[1] 1 1 1 1 7 7 7 7 7
    

    或者

     v1[!inverse.rle(within.list(rle(v1), values[lengths>3] <- FALSE ))]
    

    或者

    v1[ave(v1, v1, FUN=length)>3]
    #[1] 1 1 1 1 7 7 7 7 7
    

    或者

    library(data.table)
    v1[setDT(list(v1))[,N:=.N>3,rleid(V1)]$N]
    

    数据

    v1 <- c(1, 1, 1, 1, 5, 7, 7, 7, 7, 7)
    

    【讨论】:

      【解决方案3】:
      v <- c(1, 1, 1, 1, 5, 7, 7, 7, 7, 7)
      v <- table(v) >3
      v <- names(v[v])
      v
      

      【讨论】:

        猜你喜欢
        • 2021-07-09
        • 2016-06-12
        • 2019-09-05
        • 2023-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-17
        相关资源
        最近更新 更多