2016-05-20 6 views
1

Моя задача - найти последовательные значения в кадре данных под определенным порогом. Сначала у меня есть выделенное подмножество из кадра данных со значениями ниже порога. Теперь мои данные выглядят так:R, найти, даты, последовательные

Value  dates 
5105.47  1970-03-25 
5398.53  1970-04-08 
5520.65  1970-04-09 
5052.68  1970-04-10 
5406.77  1970-04-11 
5501.05  1970-04-12 

В результате в основном нерегулярные временные ряды. Теперь я хотел бы определить даты подряд. Какие-нибудь догадки о том, как это сделать?

+0

Что было бы желаемый результат в вашем случае? Вы пробовали 'diff'? –

ответ

3

Вы можете попробовать

df1$consecutive <- c(NA,diff(as.Date(df1$dates))==1) 
# > df1 
#  Value  dates consecutive 
# 1 5105.47 1970-03-25   NA 
# 2 5398.53 1970-04-08  FALSE 
# 3 5520.65 1970-04-09  TRUE 
# 4 5052.68 1970-04-10  TRUE 
# 5 5406.77 1970-04-11  TRUE 
# 6 5501.05 1970-04-12  TRUE 

Путем преобразования строки символов в Date формат становится возможным выполнять простые операции, как принимать разницу между двумя датами. Функция diff() принимает вектор в качестве входного сигнала и вычисляет разницу между каждой записью v[i] вектора и его предыдущей записью v[i-1]. У вектора разности, очевидно, одна запись меньше исходного. Поскольку невозможно определить, является ли первая дата в data.frame последовательной или нет, ее идентификатор может быть разумно установлен на NA.

В случае дат, если разница равна 1, дни являются последовательными, а сравнение diff(as.Date(df1$dates))==1) оценивается в TRUE.

данные

df1 <- structure(list(Value = c(5105.47, 5398.53, 5520.65, 5052.68, 
      5406.77, 5501.05), dates = structure(1:6, .Label = c("1970-03-25", 
      "1970-04-08", "1970-04-09", "1970-04-10", "1970-04-11", "1970-04-12"), 
      class = "factor")), .Names = c("Value", "dates"), 
      class = "data.frame", row.names = c(NA, -6L)) 
+0

Приятно, хотя я бы перезаписал даты df1 $ с его версией, форматированной в дате, вместо того, чтобы делать это только на лету. – Frank

+1

Спасибо @Frank. Я согласен, и я бы, вероятно, сделал то же самое. Но я заметил, что предпочтение от SO в отношении однострочного типа отвечает ;-) – RHertel