2012-05-03 57 views
3

У меня есть data.frame в виде:Подсчет частоты Непрерывные Даты

Date 
2011-08-16 
2011-08-17 
2011-08-28 
2011-09-01 
2011-09-05 
2011-09-06 
2011-10-01 
2011-10-02 
2011-10-03 
2011-10-04 

То, что я хотел бы сделать, это принять отсчет пробега, когда даты происходят в порядке т.е. они бок о бок.

В приведенном выше примере, мы имели бы 2,1,1,2,4

ответ

5

Как об этом:

Сделать воспроизводимый пример данные:

dat <- read.table(text = "2011-08-16 
2011-08-17 
2011-08-28 
2011-09-01 
2011-09-05 
2011-09-06 
2011-10-01 
2011-10-02 
2011-10-03 
2011-10-04") 

Получить счетчик пробега последовательные даты с помощью rle, следующие this answer и this answer:

(rle (cumsum(c(0, diff(as.Date(dat$V1)) > 1))))$lengths 
[1] 2 1 1 2 4 
+0

Спасибо. Не знал о diff! Для этого вам не нужна cumsum. – Dave

+0

@ davewolfs Я не уверен, что вы имеете в виду, не нуждаясь в 'cumsum'. Если я оставлю это так: '(rle ((c (0, diff (as.Date (dat $ V1))> 1)))) $ lengths', то я получаю что-то другое, чем вы хотите:' [1 ] 2 3 1 1 3' – Ben

+0

'run <- rle (c (1, diff (as.Date (dat $ Date))> 1)) таблица (выполняется $ lengths [выполняется $ values ​​== 0])' – Dave

Смежные вопросы