用 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 计算向量中的重复元素(可变长度)的主要内容,如果未能解决你的问题,请参考以下文章

R语言的自定义函数—字符组合

如何模拟R [重复]中的增长率数据向量

R语言length函数计算向量列表字符串长度实战

我如何在Javascript中拥有可变长度数组的前3个元素[重复]

“matlab”矩阵的长度怎么计算?

matlab 符号计算 求空间曲线长度