[英]Extract Unique Records from Datasets in MATLAB
這不是一個非常困難的問題,但是由於我仍在學習MATLAB,因此我不得不佩服我在努力工作。 好吧,假設我們有兩個數據集:
Input1 = [
Date;X1;X2;X3
2007-06-19;2;1;3
2007-06-22;1;2;3
2007-06-01;1;2;3
2007-06-18;1;2;3
2007-06-19;1;2;3
2007-06-20;1;2;3
2007-06-25;1;2;3
]
Input2 = [
Date;X1;X2;X3
2007-06-22;1;2;3
2007-06-19;1;2;3
2007-06-25;2;1;3
2007-06-01;1;2;3
2007-06-15;1;2;3
2007-06-18;1;2;3
2007-06-21;1;2;3
2007-06-25;1;2;3
]
Output1 = [
]
Output2 = [
]
我想做的是:-根據第一列(最早的日期放在第一位)分別對它們進行排序。 -根據第一列分別刪除每個文件中的重復項。 -當且僅當這兩個數據集中存在它們的鍵時,才保留兩行(每個數據集一個)。 -做最后檢查,以確保兩個列表中的日期元素都相同。
尤林
要開始使用,您需要稍微整理一下輸入數據,然后才能真正釋放Matlab的功能。
首先,丟失“列標題”, 即行Date;X1;X2;X3
。 Matlab數組是數字的,即使Matlab字符數組也是真正的數字。
其次,僅在每行的末尾放置分號; 就Matlab數組而言,分號IS是行的結尾,因此您的表有可能成為列向量。 在您當前使用分號的地方使用空格或逗號,並在每行的末尾添加一個分號。
第三,Matlab數組是數字的,例如2007-06-22並不是數字。 正如您所寫,Matlab也不會將其識別為字符串。 而且,如果它確實將其識別為字符串,則由於輸入內容並非全都是數字,因此會在輸入中出現barf。
您可以使用單元格數組或結構,但將輸入數組轉換為數字可能會更容易。 例如,評估以下表達式:
Input1 = [
datenum(datevec('2007-06-19')),2,1,3;
datenum(datevec('2007-06-22')),1,2,3;
datenum(datevec('2007-06-01')),1,2,3;
datenum(datevec('2007-06-18')),1,2,3;
datenum(datevec('2007-06-19')),1,2,3;
datenum(datevec('2007-06-20')),1,2,3;
datenum(datevec('2007-06-25')),1,2,3;
]
將為您提供一個不錯的數值數組,如Dan所建議的那樣。 datenum
和datevec
是Matlab內置的函數。
為了讓您入門,請對每個列表進行排序,不要重復:
% find the unique values for the first column
[~, I] = unique(Input1(:,1));
% extract the records for each unique value in the first column (sorted)
SortedAndUnique = Input1(I,:);
我相信你會解決剩下的
一些提示:
datenum('2007-06-22','yyyy-mm-dd')
將日期表示為數字 unique()
intersect()
查找同時在Input1和Input2中使用的鍵
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.