用 R 计算向量中的重复元素(可变长度)
Posted
技术标签:
【中文标题】用 R 计算向量中的重复元素(可变长度)【英文标题】:Count repeated elements (variable length) in a vector with R 【发布时间】:2021-12-26 17:49:27 【问题描述】:我们知道一个向量会包含重复的元素,而模式是
c("A","B","C","D")
但是会使用这个模式的一个子集,它总是从 A 开始,并且顺序是一样的。
一个简单的例子是
c("A","A","B","A","A","B","A","B","C","D")
我们可以这样构造它:
c("A",
"A","B",
"A",
"A","B",
"A","B","C","D")
我想要一个计算模式长度的输出向量:
c(1,2,1,2,4)
【问题讨论】:
试试rle(cumsum(x=="A"))$lengths
。
【参考方案1】:
这会:
x1 <- c("A","A","B","A","A","B","A","B","C","D")
diff(c(which(x1 == "A"), length(x1)+1))
【讨论】:
【参考方案2】:我不知道您是否有兴趣保留向量的中间列表。如果没有,@nicola 在 cmets 中的回答是最优雅的解决方案。如果是这样,那么我认为调整this 答案然后取长度可能会有用:
inp <- c("A","A","B","A","A","B","A","B","C","D")
split.vec <- function(vec, sep = 0)
is.sep <- vec == sep
split(vec, cumsum(is.sep))
out <- split.vec(inp, "A")
sapply(out, length)
# 1 2 3 4 5
# 1 2 1 2 4
【讨论】:
以上是关于用 R 计算向量中的重复元素(可变长度)的主要内容,如果未能解决你的问题,请参考以下文章