我正在使用matlab来准备我的数据集,以便在某些数据挖掘模型中运行它,我面临着在两个表之间链接数据的问题。
所以,我有两个表,A和B,它们包含某些时间戳中某些值的连续记录,我想创建第三个表C,我将在其中添加A和B的列根据某些条件排。
表A和B没有相同的行数(A有更多的测量值),但它们都有两列:
当满足以下所有条件时,将在表C中添加A和B的列:
A和B之间的时差超过3秒但不到5秒
A的记录值是B记录值的40% - 50%。
非常感谢任何帮助。
答案 0 :(得分:0)
对于第一个条件,您需要[row,col,val]=find((A(:,1)-B(:,1))>2sec && (A(:,1)-B(:,1))<5sec)
之类的内容,您需要使用datenum
或等效内容来转换时间戳。对于第二个条件,它使用[row,col,val]=find(A(:,2)>0.4*B(:,2) && A(:,2)<0.5*B(:,2)
datenum
允许您转换数组,所以首先执行此操作:
A(:,1) = datenum(A(:,1));
B(:,1) = datenum(B(:,1));
您可能需要查看datenum
上的documentation,了解字符串的格式。
time1 = [datenum([0 0 0 0 0 3]) datenum([0 0 0 0 0 3])];
创建3和5秒的日期。全部合并:
A(:,1) = datenum(A(:,1));
B(:,1) = datenum(B(:,1));
time1 = [datenum([0 0 0 0 0 3]) datenum([0 0 0 0 0 3])];
[row1,col1,val1]=find((A(:,1)-B(:,1))>time1(1)&& (A(:,1)-B(:,1))<time1(2));
[row2,col2,val2]=find(A(:,2)>0.4*B(:,2) && A(:,2)<0.5*B(:,2);
当您只想要值时,您可能不需要row
和col
的变量。 val1
包含条件1的条件1,val2
的值。如果您希望两个条件同时有效,请在find
命令中使用两者:
[row3,col3,val3]=find((A(:,1)-B(:,1))>time1(1)&& ...
(A(:,1)-B(:,1))<time1(2) && A(:,2)>0.4*B(:,2)...
&& A(:,2)<0.5*B(:,2);
根据条件实际添加两个数组:
C = A(row3,2)+B(row3,2);
答案 1 :(得分:0)
感谢您的回复和帮助!然而,有时我通过将hh:mm:ss
转换为秒来采用不同的方法,这将使以后的比较更容易:
dv1 = datevec(A, 'dd.mm.yyyy HH:MM:SS.FFF ');
secs = [3600,60,1];
dv1(:,6) = floor(dv1(:,6));
timestamp = dv1(:,4:6)*secs.';
现在我正在努力将时间和重量条件结合在一段将要运行的代码中。我应该在if
循环中使用for
条件,还是不需要for
循环?