保持向量重复次数超过3次的

时间:2015-04-22 14:20:26

标签: r vector

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

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:2)

您可以通过多种方式执行此操作,其中之一是:

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

使用unique(a)[table(a)>3],您只选择有多于3次出现的向量元素。

其余的应该是直截了当的

答案 2 :(得分:0)

v <- c(1, 1, 1, 1, 5, 7, 7, 7, 7, 7)
v <- table(v) >3
v <- names(v[v])
v