当前位置:  开发笔记 > 编程语言 > 正文

如何找到R中最长的相同数字

如何解决《如何找到R中最长的相同数字》经验,为你挑选了1个好方法。

例如,我有这样的数据

x<-c(0,0,1,1,1,1,0,0,1,1,0,1,1,1)

我想通过考虑开始和结束位置来找到最长的"1"序列,在这种情况下应该是(3,6)

在R中如何做到这一点

谢谢大家



1> A5C1D2H2I1M1..:

这是一种使用seqle"cgwtools"包的方法:

library(cgwtools)
y <- seqle(which(x == 1))
z <- which.max(y$lengths)
y$values[z] + (sequence(y$lengths[z]) - 1)
# [1] 3 4 5 6

range如果你只想要"3"和"6",你可以使用.

seqle"扩展rle到查找和编码线性序列".


以下是作为函数的答案:

longSeq <- function(invec, range = TRUE) {
  require(cgwtools)
  y <- seqle(which(invec == 1))
  z <- which.max(y$lengths)
  out <- y$values[z] + (sequence(y$lengths[z]) - 1)
  if (isTRUE(range)) range(out) else out
}

用法是:

x <- c(0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1)
longSeq(x)
# [1] 3 6
longSeq(x, range = FALSE)
# [1] 3 4 5 6

并且,以KFB的示例输入:

y <- c(0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1)
longSeq(y)
# [1]  9 11

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有