gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:23:42 25 4
gpt4 key购买 nike

如果我有以下变量:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com