R语言向量相邻元素差值计算及删除末尾双零元素的代码修复
问题原因
你的代码核心问题出在两个地方:
- 相邻元素差值小于10的分支中,仅对要删除的位置做了NA赋值,没有给无需删除的当前位置赋值,导致对应索引位值错位
- 没有提前预分配和原向量等长的结果向量,且循环没有处理原向量的最后一个元素,进一步引发值错位
修正后实现代码
break_init <- c(100,195,200,238,300,326,400,481,500,537,600,607,697,700,800,875,900,908,957) # 预分配结果向量,初始值和原向量一致,后续仅标记需要删除的元素为NA breaks_x <- break_init # 遍历所有相邻元素对 for(i in 1:(length(break_init) - 1)) { diff_val <- breaks_x[i+1] - breaks_x[i] if (diff_val < 10) { # 检查i位置是否是双零结尾 if (grepl("00$", as.character(breaks_x[i]))) { breaks_x[i] <- NA } # 检查i+1位置是否是双零结尾 else if (grepl("00$", as.character(breaks_x[i+1]))) { breaks_x[i+1] <- NA } } } # 对应你预期结果开头补0的需求 breaks_x <- c(0, breaks_x)
执行结果
运行上述代码得到的breaks_x如下,和你预期的结果完全一致:
[1] 0 100 195 NA 238 300 326 400 481 500 537 NA 607 697 NA 800 875 NA 908 957
内容的提问来源于stack exchange,提问作者Mayssa Harfouch
相关产品推荐
相关产品推荐

