我需要帮助来开发以下数据提取的一些逻辑。当C1为"1"时,我需要C2列切换到"1"。然后,当C1为"-1"时,C2列切换到"0"。C2中C1切换(1&-1(之间的所有行都需要转到"1"。
Date C1 C2
'24-Dec-1999' 0 0
'31-Dec-1999' 1 1
'07-Jan-2000' 0 1
'14-Jan-2000' 0 1
'21-Jan-2000' 0 1
'28-Jan-2000' 0 1
'04-Feb-2000' -1 0
'11-Feb-2000' 0 0
'18-Feb-2000' 0 0
'25-Feb-2000' 0 0
我使用了以下内容,但它只更改了1999年12月31日和2000年2月4日的第一个和最后一个条目。如何使C2中介于(2000年1月7日至2000年1日28日(之间的条目也列为"1"?
C2(C1==1)=1;
C2(C1==-1)=0;
更新
最简单的方法是计算累积总和
C2 = cumsum(C1);
原始/替代
你可以找到C1=1
和C1=-1
的索引,根据你的评论,这些的数量应该相等
idxStart = find(C1=1); % Could use >0.5 to avoid numerical precision issues
idxEnd = find(C1=-1); % Could use <-0.5 to avoid numerical precision issues
然后你只需要循环通过它们,并使C2=1
在之间
C2 = zeros(size(C1));
for ii = 1:numel(idxStart)
C2(idxStart(ii):idxEnd(ii)-1) = 1;
end