簡體   English   中英

從MATLAB中的數據集中提取唯一記錄

[英]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所建議的那樣。 datenumdatevec是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')將日期表示為數字
  • Dan的答案中提到的unique()
  • intersect()查找同時在Input1和Input2中使用的鍵

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM