I want to filter values from a data matrix
1 回表示 (過去 30 日間)
古いコメントを表示
I have a datamatrix with the following contents:
Rownames Cond1 Cond1 Cond1 Pvals
a 15 23 21 .055
a 45 1 58 .001
b 8 98 56 .02
c 6 89 45 .004
d 9 55 15 .008
c 45 68 95 .04
I want to filter this matrix to have a matrix like below. The idea is that for any two or more similar row names, i want to remain with the one with the lowest Pvals.
Rownames Cond1 Cond1 Cond1 Pvals
a 45 1 58 .001
b 8 98 56 .02
c 6 89 45 .004
d 9 55 15 .008
4 件のコメント
Luna
2018 年 12 月 17 日
Unfortunately I have never worked on data matrix objects before but the idea of the algorithm may help you below answer.
採用された回答
Luna
2018 年 12 月 17 日
編集済み: Luna
2018 年 12 月 17 日
Try this small code below:
dataMatrix = {'Rownames','Cond1', 'Cond1' , 'Cond1', 'Pvals';
'a', 15, 23, 21, .055;
'a', 45, 1, 58, .001;
'b', 8, 98, 56, .02;
'c', 6, 89, 45, .004;
'd', 9, 55, 15, .008;
'c', 45, 68, 95, .04};
sortedDataMatrix = sortrows(dataMatrix(2:end,:),5); % sorts the rows according to 5th column
[~,idx,~] = unique(sortedDataMatrix(:,1)); % get unique values indices
resultMatrix = [dataMatrix(1,:); sortedDataMatrix(idx,:)]; % gets the indexed rows and combine it with data matrix row names(1st row).
3 件のコメント
Luna
2018 年 12 月 17 日
The resultMatrix is what you need isn't it? It doesn't delete the rows you don't want, it sorts the values from lowest the highest first, then gets the unique values of rows(a,b,c,..etc) with this ascending order.
It actually selects the rows you wanted without removing. Please accept answer if it works correctly.
'Rownames' 'Cond1' 'Cond1' 'Cond1' 'Pvals'
'a' 45 1 58 0,001
'b' 8 98 56 0,02
'c' 6 89 45 0,004
'd' 9 55 15 0,008
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Data Import and Management についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!