首页 > 解决方案 > R中最长连续数字的长度

问题描述

我想找到最长连续数字的长度。我编写了以下代码,但在少数情况下它没有给我正确的输出。

    x <- c("1234589","8205","0126789","016","7894", "987645")
lapply(x, function(x)max(rle(cumsum(c(1, diff(as.numeric(strsplit(as.character(x), "")[[1]])) > 1)))$lengths))

我的输出是,

[[1]]
[1] 5

[[2]]
[1] 3

[[3]]
[1] 4

[[4]]
[1] 2

[[5]]
[1] 4

[[6]]
[1] 6

其中,正确的输出应该是:

[[1]]
[1] 5

[[2]]
[1] 1

[[3]]
[1] 4

[[4]]
[1] 2

[[5]]
[1] 3

[[6]]
[1] 4

标签: r

解决方案


这是一种不使用的可能性rle

lapply(x, function(s) {
    v <- as.numeric(unlist(strsplit(s, "")))
    max(sapply(split(v, cumsum(c(0, abs(diff(v)) != 1))), length))
})
#[[1]]
#[1] 5
#
#[[2]]
#[1] 1
#
#[[3]]
#[1] 4
#
#[[4]]
#[1] 2
#
#[[5]]
#[1] 3
#
#[[6]]
#[1] 4

推荐阅读