Assign NaN to specific rows(based on criteria) for multiple table variables
10 ビュー (過去 30 日間)
古いコメントを表示
I want to assign NaN to (time-)table rows that match a criteria (T.Var1~=1). I would like to do this for specific variables in the table.
But instead of doing
T.Var2(T.Var1~=1)=NaN; % Note: My variables are not called Var1, Var2, ... but I simplified it here to these names ;-)
T.Var5(T.Var1~=1)=NaN;
%...
T.Var10(T.Var1~=1)=NaN;
%...
I would like to do this in a shorter code. Is this possible?
I look for something like this:
T.{'Var2','Var5', 'Var7', 'Var10'}(T.Var1~=1)=NaN;
0 件のコメント
採用された回答
Turlough Hughes
2022 年 2 月 1 日
You can do that as follows:
% Firstly some sample data
T = array2timetable(randi(3,10,5),'Rowtimes',datetime() + seconds(0:9))
% You can do it using column numbers
T{T.Var1==1,[2 4]} = nan
% or using variable names
T{T.Var1==1,["Var3", "Var5"]} = nan
3 件のコメント
Turlough Hughes
2022 年 2 月 1 日
No problem. The single quotes are type char and the double quotes are type string. You can see why Var1Var3Var5 came up just by typing it into the command window:
idx = ['Var1' 'Var3' 'Var5']
whereas when you concatenate strings the result is different:
idx = ["Var1" "Var3" "Var5"]
You could also use a cell array of char's to index by the variable names:
T = array2timetable(randi(3,10,5),'Rowtimes',datetime() + seconds(0:9));
T{T.Var1==1,{'Var3', 'Var5'}} = nan
その他の回答 (1 件)
Benjamin Thompson
2022 年 2 月 1 日
If you are assigning from a scalar it seems you must do this column by column. Use an index vector to select which rows to assign:
T.Var1 = [1 2 3 4 1]'
T.Var2 = 2*ones(5,1)
T.Var3 = 5*ones(5,1)
T.Var4 = 10*ones(5,1)
I = T.Var1 ~= 1
T2.Var2(I) = NaN
T2.Var3(I) = NaN
T2.Var4(I) = NaN
See the MATLAB help article "Access Data in Tables" for more data reading and writing examples.
参考
カテゴリ
Help Center および File Exchange で Tables についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!