这是一个不太难的问题,但是因为我还在学习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 = [
]
我想做的是: - 根据第一列(最早放置日期的位置)分别对每个列进行排序。 - 根据第一列分别删除每个文件中的重复项。 - 当且仅当它们的密钥存在于这两个数据集中时,保留两条线(每个数据集一条线)。 - 进行最后检查以确保两个列表上的日期元素逐一相同。
eualin。
答案 0 :(得分:3)
为了让您入门,在真正释放Matlab的强大功能之前,您需要稍微清理输入数据。
首先,丢失'列标题',即行Date;X1;X2;X3
。 Matlab数组是数字的,甚至Matlab字符数组也是数字。
其次,只在每一行的末尾放置分号;就Matlab数组而言,一个分号是一行的结尾,所以你的表有可能成为列向量。使用当前有分号的空格或逗号,并在每行的末尾加上一个分号。
第三,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内置的函数。
答案 1 :(得分:2)
为了让您入门,一个没有重复的排序列表为每个执行此操作:
% 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,:);
我相信你会解决剩下的问题
答案 2 :(得分:1)
一些提示:
datenum('2007-06-22','yyyy-mm-dd')
将日期表示为数字unique()
正如Dan的回答中提到的那样intersect()
查找Input1和Input2