【问题标题】:Count repeated elements (variable length) in a vector with R用 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

标签: r vector


【解决方案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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 2016-10-19
      • 1970-01-01
      • 2019-06-02
      • 2018-12-03
      • 2013-08-23
      • 1970-01-01
      相关资源
      最近更新 更多