R和I的新手有一个看起来像数据的矢量< - c(1,2,3,9,10,11,12,29,30,31,32,33,34)。我想计算连续值的序列数。即1,2,3将是一个计数,9,10,11,12另一个,然后是29,30,31,32,33和34,总计数为3.
我目前正在尝试使用此循环来替换所有顺序值,除了最后一个NA(然后我可以删除NA并计数):
data<- c(1, 2, 3, 9, 10, 11, 12, 29, 30, 31, 32, 33, 34)
event_detect<- function (data) {
for (i in 1:length(data)){
if (data[(i+1)] == data[i]+1){
data[(i)]<-NA
}
}
}
但是这会返回“缺少值,其中需要TRUE / FALSE”错误。我认为这可以在没有循环的情况下实现,但我找不到解决方案。我知道rle可以为相同值的运行执行此操作,因此类似于rle的值增加1。
感谢您的帮助
答案 0 :(得分:2)
我们计算不是一个差异的数量,并在该数字上加一个:
sum(diff(data) != 1) + 1
这说明R在算术运算中将逻辑值强制转换为数值。