использование R для фильтрации непоследовательных чисел из столбца данных - PullRequest
2 голосов
/ 25 ноября 2010

Предположим, у меня есть такой фрейм данных:

DAYS   VALUE
1      A
2      A
3      A
5      A
7      A
9      A
10     A
12     A
13     A
14     A
15     A

Я пытаюсь получить функцию, чтобы осталась только серия последовательных чисел (минимум 3), например:

DAYS   VALUE
1      A
2      A
3      A
12     A
13     A
14     A
15     A

Интересно, есть ли какие-нибудь функции из пакетов, которые могут это сделать?

Спасибо!

Ответы [ 2 ]

12 голосов
/ 25 ноября 2010

Должен быть более простой способ ... но в качестве единственного:

d[(1+(s<-c(0,cumsum(1-(diff(d$DAYS)==1)))))%in%which(table(s)>=3),]

пошагово

d1 <- c(FALSE, diff(d$DAYS)!=1)
d2 <- cumsum(d1)+1
d3 <- table(d2)
d4 <- which(d3 >= 3)
d[d2 %in% d4,]
0 голосов
/ 25 ноября 2010

Простой цикл for тоже подойдет:

 d <- as.integer(DATA$DAYS)
 consec <- rep.int(FALSE, length(d))

 for(i in 1:(length(d)-2))
     if(identical(d[i] + 1:2, d[i + 1:2])){
         consec[i + 0:2] <- TRUE
     }

DATA[consec, ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...