R语言统计向量中长度≥2的连续数值序列个数的实现方法
R实现统计符合要求的连续序列个数
实现思路
我们要统计的是不可延长的、长度≥2的连续递增1序列的个数,核心思路如下:
- 先计算向量相邻元素的差值,筛选出差值为1的位置
- 用游程编码统计连续差值为1的段的数量,每一段对应一个符合要求的序列
完整代码
# 定义输入向量 vec <- c(28, 44, 45, 46, 47, 48, 61, 62, 70, 71, 82, 83, 104, 105, 111, 115, 125, 136, 137, 138, 146, 147, 158, 159, 160, 185, 186, 187, 188, 189, 190, 191, 192, 193, 209, 263, 264, 265, 266, 267, 268, 280, 283, 284, 308, 309, 318, 319, 324, 333, 334, 335, 347, 354) # 计算相邻元素差值,判断是否为1 diff_logic <- diff(vec) == 1 # 游程编码统计连续为TRUE的段数,即为所求结果 result <- sum(rle(diff_logic)$values) # 输出结果 print(result)
代码说明
diff(vec):返回向量相邻元素的差值,长度比原向量少1diff(vec) == 1:得到逻辑向量,对应位置为TRUE表示该位置相邻元素差为1rle():游程编码函数,返回两个属性:values是连续出现的值,lengths是对应连续出现的长度sum(rle(diff_logic)$values):统计逻辑值为TRUE的个数,也就是连续差为1的段数,运行后得到输出为14,符合要求。
内容的提问来源于stack exchange,提问作者climsaver
相关产品推荐
相关产品推荐

