2015-06-05 15 views
0

的兩行我有從EPA的數據集,我已凝結成六列Matlab的:編碼循環語句以減去數據

enter image description here

第一列表示不同public water suppliers(PWS)。第二個是sampleid number。第三個是associated sample id number。標籤開頭處帶有MR的樣品指示出口點。所有其他sample IDs是具有相關MR的入口點。第四列是sample date。第五個是個人reference number。第六欄是sample concentration

本質上講我要完成匹配相同PWS,同樣date,同樣sample IDassociate sample id最後兩者相減sample concentrations與行相關聯的區別。

我的數據集是6列乘39000行。

這是我曾嘗試代碼:

filename = fopen('Datamine2.csv'); 
SampleList = textscan(filename,'%s %s %s %s %s %s','Delimiter',',','EmptyValue',0); 
fclose(filename); 

results = []; 
for i = 1:5 
    if SampleList{3}{i} ~= 0 
     SampleID1 = SampleList{5}{i}; 
     for j = 1:5 
      if SampleList{2}{j} == SampleList{3}{i} && SampleList{1}{j} == SampleList{1}{i} && SampleList{4}{j} == SampleList{4}{i} 
       SampleID2 = SampleList{5}{j}; 
       SampleDiff = str2double(SampleList{6}{i}) - str2double(SampleList{6}{j}); 
       newresults = [SampleList{1}{i} SampleList{4}{i} SampleDiff SampleID1 SampleID2]; 
       results = [results;newresults] 
      end 
     end 
    end 
end 

但是這是我收到的錯誤:

EDU >>使用==矩陣尺寸必須同意運行epadata錯誤。

錯誤epadata(10號線)
if SampleList{2}{j} == SampleList{3}{i} && SampleList{1}{j} == SampleList{1}{i} && SampleList{4}{j} == SampleList{4}{i}

錯誤運行(64行)evalin('caller', [script ';']);

誰能提供任何指引到解決這個? 很多很多,謝謝。

+0

使用[MATLAB的調試器](http://www.mathworks.com/help/matlab/matlab_prog/debugging-process-and-features.html)來驗證您用於每個比較的所有單元格是相同的大小。 – excaza

回答

0

您的數據爲string格式。 (類char

使用strcmp()函數來比較字符串,而不是因爲====比較兩個矩陣逐元素和矩陣尺寸必須同意用於比較。

實施例:

>> strcmp('abc','ab') 

ans = 

0 

>> 'abc' == 'ab' 

使用==
矩陣尺寸必須同意錯誤。

+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 –

+0

@BJMyers親愛的邁爾斯,這是答案,不是批評或澄清要求,他的代碼的問題是,他使用==而不是strcmp,當兩個字符串的大小不相等時會產生錯誤!(因爲==比較兩個矩陣和矩陣維度必須同意比較!), –

+0

@darenshan該評論來自審覈隊列,您的回答即將被刪除。只做了必要的修改以避免這種情況。希望你不要介意:) –