2014-09-17 7 views
0

날짜 배열이 있고 특정 시간 간격 (예 : 5 분)이 아닌 다른 날짜가 삭제되도록하고 싶습니다. 루프가 더 큰 데이터 세트로 영원히 걸릴 때, 현명한 방법을 찾아야합니다.특정 시간 간격으로 날짜 그룹화하는 방법

입력 데이터 :

2,009 07 07 07 07 16시 1분 30초 16시 4분 6초

2,009 07 07 16시 5분 0초

2,009 07 07

2,009 16시 12분 0초

2009 07 07 16시 19분 43초

2009 07 07 16시 24분 0초

결과 :

2009 07 07 16시 1분 30초

2009 07 07 16시 4분 6초

2009 07 07 16시 5분 0초

2009 07 07 16 : 19 : 43

2,009 07 07 16시 24분 0초

값 2,009 07 07 16시 12분 0초이 때문에 버렸다 그것은 다른 타임 스탬프에서 5 분 이상 떨어져있었습니다.

덕분에, 크리스티


는 차 문제 :

댄 및 nkjt 모두, 감사했다 구현을 제안! 날짜가 두 그룹의 일부인 경우 : A 또는 B와 그룹 B의 해당 날짜가 몇 초/분 간격으로있는 A 그룹의 날짜가 있는지 찾으려면 어떻게합니까? 그룹 A에서 날짜를 지우는 것이 아니라면 ..

답변

1

diff을 사용할 수 있습니다. 데이터를 값의 벡터로 변환하려면 datenum을 사용해야합니다. MATLAB의 datenums에서 "1"당신이 하루에 사람들의 수로 나눈 시간 단위의 측면에서 datenum 단계를 정의 할 수 있습니다, 단 하루입니다 : 여기

s = num_mins/(24*60); 

DIFF와 트릭 :

x = datenum(mydata); 
s = num_mins/(24*60); 
% for increasing times we shouldn't need the `abs` but to be safe 
d = abs(diff(x)); 
q = [d (s+1)]>s&[(s+1) d]>s; 

(당신은 다시 변환 datestr를 사용하거나 원래의 데이터에 q을 적용 할 수 있습니다)

작동 방식 :

diff의 출력은 원본보다 한개 짧습니다. 이는 인접한 값 사이의 차이 일뿐입니다. 우리는 방향성이 있어야합니다. 각 값을 전후에 비교하여 확인해야합니다.

[d (s+1)]>s은 벡터를 원본과 동일한 길이로 만들고 차이 값이 s보다 큰지 확인합니다. 마지막 값을 s + 1로 설정했기 때문에 최종 값은 항상 true을 반환합니다. 이것은 값과 그 값 다음에 오는 값 사이에 간격이 있는지 확인하는 것입니다 (따라서 최종 값은 항상 참입니다).

[(s+1) d]>s은 동일하지만 다른면에서 동일합니다. 다시 한 번, 하나의 값을 첫 번째로 설정하고 s보다 커지므로 항상 사실입니다.

이 두 가지를 합치면 양쪽에서 5 분 이상 차이가 나는 지점이 제공됩니다 (한 쪽 끝점은 끝점).

+1

+1하지만 q = [d; (s + 1)]> s 및 [(s + 1); d]> s' 오히려 – Dan

관련 문제