r - 检查 R 中变量值 (v) 的前一个/连续数字

标签 r

如果我有以下变量:

numbers<-c(1,2,3,-5,4,5,6,-5,1,2,1,1,1,1,7,1,1,1,8,1,1,1,1,1,1,1,1,1,1,9,10,11,12,13,14,15,1,1,1,5
,5,5,5,5,5,5,5,5,5,5,5,5,5,5,78,78,78,78,78,78,78,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,-5,0,0,0,0,0,-5,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,-5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-5,-5,0,0)

我首先要找到所有 -5 值:

index<-which(numbers == -5)
[1]   4   8  95 101 135 150 151
value<-numbers[which(numbers == -5)]
[1] -5 -5 -5 -5 -5 -5 -5

我现在要做的是检查 -5 出现 位置前后的 5 个值 并查看所有值是否都等于 0 如果是这样,请保留它的起始索引 (index) 如果不是,请将其从 index 中删除:

所以在下面的情况下,期望的结果是:

r
95 101 135

好吧,我已经设法通过两个独立的 for 循环和一个 if 条件和一个 2 的临时列表(一个元素保存索引号和值)和一个用于存储结果的变量来解决问题。

但是我确定有更好/更短/更快的结果吗? 有人有什么建议吗?在最好的情况下,如果可能的话,我更喜欢基本的 R 答案。

最佳答案

which(
  stats::filter(numbers == 0L,#logical vector 
                c(rep(1, 5), 0, rep(1, 5)) #sum 5 preceding and following logical values
  ) == 10L & #10 TRUE values?
    numbers == -5L
)
#[1]  95 101 135

关于r - 检查 R 中变量值 (v) 的前一个/连续数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33824048/

相关文章:

r - 根据作为另一个数据帧的行给出的条件有效地过滤数据帧

r - 将数字转换为时间

R 插入符包 (rpart) : constructing a classification tree

RSelenium 不工作

R 中的阈值舍入数字

r - 从 data.frame 中提取列作为向量

r - 从主 .R 文件编织 .rmd 时在 .rmd block 中查找文件源时遇到问题

r - 使用 spsurvey 在多边形内绘制 GRTS 点

r - 创建循环以在独立页面中打印格子图中的选定面板

r - 初始化将由 renderUI 生成的值