[英]Multiple duplicates (2 times, 3 times,…) in R
After searching for a while, I know that this question has not been answered yet. 经过一段时间的搜索,我知道这个问题还没有得到解答。 Assume that I have the following vector
假设我有以下向量
v <- c("a", "b", "b", "c","c","c", "d", "d", "d", "d")
How do I find those values having more than 1 duplicates 如何找到重复次数超过1的值
(should be "c","c","c", "d", "d", "d", "d")
(应为
"c","c","c", "d", "d", "d", "d")
and more than 2 duplicates 超过2个重复
(should be "d", "d", "d", "d"
) (应为
"d", "d", "d", "d"
)
Function duplicated(v)
only returns values having duplicates. 函数
duplicated(v)
仅返回具有重复的值。
You can generate a table()
and then check which elements of v
are part of the relevant subset of the table, eg 您可以生成一个
table()
,然后检查v
哪些元素是表的相关子集的一部分,例如
R> v <- c("a", "b", "b", "c","c","c", "d", "d", "d", "d")
R> tab <- table(v)
R> tab
v
a b c d
1 2 3 4
R> v[v %in% names(tab[tab > 2])]
[1] "c" "c" "c" "d" "d" "d" "d"
R> v[v %in% names(tab[tab > 3])]
[1] "d" "d" "d" "d"
I would use ave
to write a simple function like this: 我会用
ave
写一个这样的简单函数:
myFun <- function(vector, thresh) {
ind <- ave(rep(1, length(vector)), vector, FUN = length)
vector[ind > thresh + 1] ## added "+1" to match your terminology
}
Here it is applied to "v": 这里它适用于“v”:
myFun(v, 1)
# [1] "c" "c" "c" "d" "d" "d" "d"
myFun(v, 2)
# [1] "d" "d" "d" "d"
Of course, there is always "data.table": 当然,总有“data.table”:
as.data.table(v)[, N := .N, by = v][N > 1 + 1]$v
# [1] "c" "c" "c" "d" "d" "d" "d"
as.data.table(v)[, N := .N, by = v][N > 2 + 1]$v
# [1] "d" "d" "d" "d"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.