【发布时间】: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)
有没有聪明的方法来实现这一目标?
提前致谢
【问题讨论】:
-
向量排序好了吗?
-
是的,奥斯曼,向量已经排序了
我有这样的向量:c(1, 1, 1, 1, 5, 7, 7, 7, 7, 7)。
我想做的是只保留那些在这个向量中出现超过三次的元素。在这种情况下,我想获得以下向量
c(1, 1, 1, 1, 7, 7, 7, 7, 7)
有没有聪明的方法来实现这一目标?
提前致谢
【问题讨论】:
有很多方法可以做到这一点,其中一种是:
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 次的元素。
其余的应该是直截了当的
【讨论】:
试试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)
【讨论】:
v <- c(1, 1, 1, 1, 5, 7, 7, 7, 7, 7)
v <- table(v) >3
v <- names(v[v])
v
【讨论】: