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