How to add values to a column based on time column and its own column?

8 ビュー (過去 30 日間)
Vivian Dinh-Dang
Vivian Dinh-Dang 2017 年 7 月 14 日
コメント済み: Peter Perkins 2017 年 7 月 24 日
What I'm trying to do is add values to a column based on two conditions. I want to locate the time value based on a value in a different column from the same row. Then I want to continue that value from the different column for the next x minutes that I decide on. I'm not really sure how to be phrasing what I would like so I think it's better if I give what I have now and what I would like to achieve.
My current timetable named E has two columns that look like the 10.44.48 Screen Shot
What I want is to replace the 0 with a 2 in the Interval column for any rows after the current 2 for the next, let's say, 3 minutes following the first 2 value in the Interval column. So I'd end up with the 10.47.08 Screen Shot
I want to be able to add the 2 by just relying on the initial interval value, so that I don't have to search for the time values in my data set for all the different interval values I have. My data set will not necessarily have rows separated by one minute intervals which is why I need to specify the time value as well.
I've been using variables like E.Time to specify my columns.
Please help!

採用された回答

Peter Perkins
Peter Perkins 2017 年 7 月 20 日
If your screen shot example is really all you want to do, then it's this:
i = find(tt.Interval > 0);
tt.Interval(i:end) = tt.Interval(i);
But I'm guessing there's more to what you are asking, and your screen shots don't even match your description. You may be asking for this:
i = find(tt.Interval > 0);
tr = timerange(tt.Time(i),tt.Time(i)+minutes(3);
tt(tr,:).Interval = tt.Interval(i);
  2 件のコメント
Vivian Dinh-Dang
Vivian Dinh-Dang 2017 年 7 月 20 日
編集済み: Vivian Dinh-Dang 2017 年 7 月 20 日
Yeah, so I actually ended up writing a code similar to yours:
%
E.Interval(E.Note==4)=2
V=find(E.Interval==2)
X=E.Time(V,1)
Y=timerange(17/07/2017+datetime(X),17/07/2017+datetime(X)+minutes(30))
E.Interval(Y,:)=2
K=max(E.BPM(E.Interval==2,:))
I might try your code instead because it seems simpler and doesn't require me to concatenate a date into my time column. I'm learning MATLAB on my own, so I appreciate that you were able to look past my inconsistencies. Thanks for the help!
update: I tried the timerange but I get a "Attempt to execute SCRIPT timerange as a function" error. Any idea on why?
Peter Perkins
Peter Perkins 2017 年 7 月 24 日
I image you have something else called timerange on your path. Type which timerange -all.

サインインしてコメントする。

その他の回答 (1 件)

Nagarjuna Manchineni
Nagarjuna Manchineni 2017 年 7 月 19 日
You can implement your workflow similar to the example below.
data1 = [1;2;3;4;5;6;7;8;9;10];
data2 = [0;0;2;0;0;0;0;0;0;0];
T = table(data1,data2);
for k=1:height(T)
row = T.Row(k);
%if (<your application condition>)
row{1,1} %Accessign data from a table
row{1,2} = 2; %Updating data in a table
%end
end
Also for time data there is a MATLAB function called 'etime' that tells you how much duration is there in between two date vectors.
Refer to the following documentation page for more information on using 'etime':
  1 件のコメント
Vivian Dinh-Dang
Vivian Dinh-Dang 2017 年 7 月 20 日
Thank you, I'll definitely be using the etime function in the future.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeInteractive Control and Callbacks についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by