2010-02-14 2 views
0

확인, 아직 MATLAB이 계속 표시됩니다. 두 파일이 서로 다른 형식으로되어 있습니다. 하나의 Excel 파일. data1.xls, 크기 = 86400 X 62 같습니다 같은 :MATLAB, 시간 일치 필터

Date/Time par1 par2 par3 par4 par5 par6 par6 par7 par8 par9 
08/02/09 00:06:45 0 3 27 9.9 -133.2 0 0 0 1 0 

또 다른 파일, data2.csv, 크기 = 144 X 27 (아무것도 누락되지 않은 경우.)

그것은 다음과 같습니다

date time P01 P02 P03 P04 P05 P06 P07 P08 P09 P10 P11 
8/16/2009 0:00 51 45 46 54 53 52 524 5 399  89  78 
지금은

Data10minAvg = mean(reshape(Data,300,144,62)); 

을 사용하고

는 10 분의 AV를 얻을 수 있습니다 첫 번째 Excel 파일의 erage. 이제 위의 파일을 .csv 파일과 비교해야합니다. .csv 파일에 타임 스탬프가 누락되어 있습니다.

누락 된 날짜 기록을 0 행으로 대체하여 data2.csv을 크기 144 x 27의 파일로 만들려면 어떻게해야합니까?

data1.xls 파일과 newdata2.csv를 비교하는 것보다 실제로 도움이됩니다.

업데이트

안녕이 바울이다. 고맙습니다 Geodesic. 편집 방법을 모르므로 전체 파일을 작성할 수 없습니다. 그 질문을 완벽하게 이해했습니다.

하지만 코드를 실행할 때 길이가 377 X 11 인 파일을 생성하는데 10 분 간격을 원할 때 timediff (i)> 10을 사용할 때 내 파일 길이가 144 자 이상이어야합니다. 코드는

당신이 내가 그것을 사용할 수 있도록 나를 루프 마지막을 이해하는 데 도움이 될 수 난 내 시간을 얻을 수

fid = fopen('data2.csv', 'rt'); 

topLine = fgets(fid); 

data = textscan(fid, '%s %f %f %f %f %f%f%f %f %f %f %f%f%f %f %f %f %f%f%f %f %f %f %f%f%f %f %f ' ,.... 'Delimiter',',', 'CollectOutput',1, 'HeaderLines',1); 

fclose(fid); 

p= [datenum(data{1}) data{2}]; 

for n=1:127 % this file was of length 127 

s=datevec(p(n,1)); Hour= s(1,4) min=s(1,5) 

nTime(n,:)=60*Hour+min; end 

을 사용하고 있었다 나를 위해 매우 복잡하다.

내 최종 파일은 144 X (11)는 길이이어야합니다 (열은 다양하지만 난 그것을 변경할 수 있습니다)하지만 행이에

** (144)는 그냥 코드 timeDiff = 라운드 (차이 (datenum를 (사용하여 시도에 시간) * 24 * 6)); 그것은 내가 원하는 것에 훨씬 가깝게 나에게 143 줄을 주었다. **

다른 모든 값도 반올림됩니다. 중지하려면 어떻게해야합니까?

감사합니다.

+0

나는 당신이 여기있는 것을 100 % 확신하지 못합니다. data2.csv에서 어떻게 읽으십니까? 셀에 데이터가 있거나 벡터로 데이터를 분리 했습니까? 데이트 스탬프가 누락되었습니다. 그렇다면 벡터에 NaN 값이있는 것입니까? 문제를 조금 더 명확히 할 수 있다면 솔루션을 제공 할 수 있어야합니다. – Geodesic

+0

나는 데이터를 .csv 형식으로 가지고 있으므로 ','구분 기호로 texscan을 사용하고 있습니다. (하지만 더 쉽게 파일을 .xls 파일에 저장할 수도 있습니다.) 일부 파일의 크기는 140 X 27 또는 139 X 27 ect ....입니다. 따라서 파일의 길이는 날짜에 따라 다릅니다. 스탬프가 누락되었습니다. 하루에 24 X6 (10 분) 파일이 있어야합니다. 지금 알려 주시기 바랍니다. 감사합니다. – Paul

답변

1

일부 시적 사용권과 함께 %s %u %u %u %u %u %u %u %u %u %u %u 문자열이있는 textscan을 사용하여 파일을 읽는 것처럼 보입니다.

date time, P01,P02, P03, P04, P05, P06, P07, P08, P09, P10, P11 
8/16/2009 0:00,51,45,46,54,53,52,524,5,399,89,78 
8/16/2009 0:01,11,73,65,67,10,32,100,64,167,87,48 
8/16/2009 0:02,20,58,89,15,30,67,113,76,409,55,26 
8/16/2009 0:03,89,33,33,58,90,61,545,51,88,23,34 
8/16/2009 0:04,33,9,92,43,86,97,345,20,369,38,29 
8/16/2009 0:06,24,86,74,38,38,90,16,48,197,34,75 
8/16/2009 0:07,59,86,67,30,7,54,135,8,231,66,19 
8/16/2009 0:08,47,11,74,30,30,60,302,49,200,59,40 
8/16/2009 0:09,76,50,66,48,92,2,598,83,336,26,34 
8/16/2009 0:10,97,12,38,62,54,63,437,32,480,85,53 
8/16/2009 0:11,30,78,6,98,98,21,375,50,72,87,15 
8/16/2009 0:12,3,63,2,30,14,7,436,100,406,9,55 
8/16/2009 0:13,43,19,32,8,31,20,426,29,296,97,50 
8/16/2009 0:16,83,1,75,66,43,43,356,40,496,86,68 
8/16/2009 0:17,24,69,67,40,81,23,526,36,104,73,10 
8/16/2009 0:18,47,28,37,97,31,19,546,73,381,87,8 
8/16/2009 0:19,73,38,92,81,21,63,227,50,463,91,74 
8/16/2009 0:20,20,56,12,76,79,67,358,47,234,89,57 

당신이 가지고있는이 비슷하다 나는 상황을 모방하려는 시도에 어떤 임의의 int를 가진 파일을 만들었어요? 전체 행 (0:05, 0:14, 0:15)이 누락 되었습니까? 그런 다음 데이터가 누락 된 행을 0으로 채우고 싶습니까?이 솔루션에

date time, P01,P02, P03, P04, P05, P06, P07, P08, P09, P10, P11 
8/16/2009 0:00,51,45,46,54,53,52,524,5,399,89,78 
8/16/2009 0:01,11,73,65,67,10,32,100,64,167,87,48 
8/16/2009 0:02,20,58,89,15,30,67,113,76,409,55,26 
8/16/2009 0:03,89,33,33,58,90,61,545,51,88,23,34 
8/16/2009 0:04,33,9,92,43,86,97,345,20,369,38,29 
0,0,0,0,0,0,0,0,0,0,0,0 
8/16/2009 0:06,24,86,74,38,38,90,16,48,197,34,75 
8/16/2009 0:07,59,86,67,30,7,54,135,8,231,66,19 
8/16/2009 0:08,47,11,74,30,30,60,302,49,200,59,40 
8/16/2009 0:09,76,50,66,48,92,2,598,83,336,26,34 
8/16/2009 0:10,97,12,38,62,54,63,437,32,480,85,53 
8/16/2009 0:11,30,78,6,98,98,21,375,50,72,87,15 
8/16/2009 0:12,3,63,2,30,14,7,436,100,406,9,55 
8/16/2009 0:13,43,19,32,8,31,20,426,29,296,97,50 
0,0,0,0,0,0,0,0,0,0,0,0 
0,0,0,0,0,0,0,0,0,0,0,0 
8/16/2009 0:16,83,1,75,66,43,43,356,40,496,86,68 
8/16/2009 0:17,24,69,67,40,81,23,526,36,104,73,10 
8/16/2009 0:18,47,28,37,97,31,19,546,73,381,87,8 
8/16/2009 0:19,73,38,92,81,21,63,227,50,463,91,74 
8/16/2009 0:20,20,56,12,76,79,67,358,47,234,89,57 

내 가정은 파일이 당신에게 항상 정적 크기 (예 : 144) 될 수 없습니다 파일을 허용 할 때마다 단계의 차이의 합해야한다는 것입니다. 나는 벡터에 시간을 꺼내 데이터 매트릭스가 아닌 셀의 나머지 부분을 만들었지 만, 당신이 셀 솔루션을 해결하기 쉬울 것 볼 수 있듯이했습니다

fid = fopen('data2.csv', 'rt'); 
data = textscan(fid, ['%s' repmat('%u',1,11)], 'HeaderLines', 1, 'Delimiter', ','); 
fclose(fid); 

%//Make time a datenum of the first column 
time = datenum(data{1}, 'mm/dd/yyyy HH:MM'); 
%//Find the difference in minutes from each row 
timeDiff = round(diff(datenum(time))*24*60); 

%//the rest of the data 
data = cell2mat(data(2:12)); 


for i=1:length(timeDiff) 
    if timeDiff(i) > 1 
     %//there's are missing rows, make a gap 
     data = [data(1:i,:); repmat(0,timeDiff(i)-1,11);data(i+1:end,:)]; 
    end 
end 

그리고 마지막으로, 출력 :

data = 

      51   45   46   54   53   52   524   5   399   89   78 
      11   73   65   67   10   32   100   64   167   87   48 
      20   58   89   15   30   67   113   76   409   55   26 
      89   33   33   58   90   61   545   51   88   23   34 
      33   9   92   43   86   97   345   20   369   38   29 
      0   0   0   0   0   0   0   0   0   0   0 
      24   86   74   38   38   90   16   48   197   34   75 
      59   86   67   30   7   54   135   8   231   66   19 
      47   11   74   30   30   60   302   49   200   59   40 
      76   50   66   48   92   2   598   83   336   26   34 
      97   12   38   62   54   63   437   32   480   85   53 
      30   78   6   98   98   21   375   50   72   87   15 
      3   63   2   30   14   7   436   100   406   9   55 
      0   0   0   0   0   0   0   0   0   0   0 
      0   0   0   0   0   0   0   0   0   0   0 
      43   19   32   8   31   20   426   29   296   97   50 
      83   1   75   66   43   43   356   40   496   86   68 
      24   69   67   40   81   23   526   36   104   73   10 
      47   28   37   97   31   19   546   73   381   87   8 
      73   38   92   81   21   63   227   50   463   91   74 
      20   56   12   76   79   67   358   47   234   89   57