r - 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
解决方案
这是一种不使用的可能性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
推荐阅读
- stun - 如果coturn的外部IP仅用于aws?
- java - 我的 jar 文件在 Windows 中运行良好,但在 linux 中它抛出“线程“主”java.lang.NoClassDefFoundError:javax/jms/JMSException 中的异常”
- ios - 如何使用 Firebase 获取设备令牌?
- manifest - 不同的 Ionic PWA 主页与网页主页
- python - 如何根据另一个列表计算一个项目在列表中出现的次数
- ruby-on-rails - 通过 API 创建和保存 Google 地图(带有地标)
- junit - NullPointerException 测试模拟
- angular - 将 Angular-Material 5 与 Angular 6 一起使用
- elasticsearch - 查询字符串和类型嵌套(elasticsearch)
- reactjs - 如何将屏幕名称传递给另一个组件