统计某个值在r中出现的次数

Counting number of appeareances of a certain value in r

假设我们有一个向量 a <- c(1,2,3,4,1,5,6,1,7),我想要一个函数 return 每个值的重复次数。我想要得到的结果是 c(1,1,1,1,2,1,1,3,1) - 因为数字 1 被重复了 3 次。

第二个问题 - 如何获得一个函数 return c(1,0,0,0,2,0,0,3,0) 上面的值?所以它只会计算重复的元素,所有其他元素都会得到 0?

谢谢!

一个选项是

unsplit(lapply(split(a, a), function(x) cumsum(duplicated(x))+1),a)

ave

res <- ave(a, a, FUN = function(x) cumsum(duplicated(x))+1)
res
#[1] 1 1 1 1 2 1 1 3 1

和第二部分

res[duplicated(res)] <- 0
res
#[1] 1 0 0 0 2 0 0 3 0

另一种选择是sapply

temp <- sapply(1:length(a),function(x) sum(a[1:x] == a[x]))
temp
#[1] 1 1 1 1 2 1 1 3 1

And for the second one:

temp[duplicated(temp)] <- 0

您可以使用ave函数:

ave(rep(1, length(a)), a, FUN=cumsum)
# [1] 1 1 1 1 2 1 1 3 1

根据@lmo 的评论,第二部分:

alldups <- duplicated(a) | duplicated(a, fromLast = TRUE)
res <- ave(rep(1, length(a)), a, FUN=cumsum)
res[!alldups] <- 0
# [1] 1 0 0 0 2 0 0 3 0