Need help filtering csv by values inside column

Conor Nelson

Conor Nelson (view profile)

さんによって質問されました 2019 年 7 月 8 日

Star Strider (view profile)

さんによって コメントされました 2019 年 7 月 12 日
Star Strider

Star Strider (view profile)

さんの 回答が採用されました
I have a large csv file(1034361x28). I want to look at column #1, and find rows containing the same column1 value and find the minimum value of column 2 for the new data set.
simple Ex.
if i have:
2 23
2 39
2 40
5 12
5 9
9 29
9 85
I need the code to find the minimum values for each subset of column 2(min of (23,39,40) and (12,9) and (29,85)).
How would i do so for a 1034361x28 file?
Thank You

0 件のコメント

サインイン to comment.

1 件の回答

Star Strider (view profile)

2019 年 7 月 8 日
採用された回答

Try this:
A = [2 23
2 39
2 40
5 12
5 9
9 29
9 85];
[UA1,~,Ix] = unique(A(:,1));
Col2Max = accumarray(Ix, A(:,2), [], @min);
Out = [UA1, Col2Max];
producing:
Out =
2 23
5 9
9 29

Star Strider

Star Strider (view profile)

on 11 Jul 2019
Would i still use accumarray but without the @min?
Yes. Only the function changes:
SameCol1 = accumarray(Ix, A(:,2), [], @(x){x});
SameCol1{1}
producing:
ans =
23
39
40
and similarly for the others.
It now creates a cell array of values correspoinding to each value of column 1.
Conor Nelson

Conor Nelson (view profile)

on 12 Jul 2019
Sorry i think i worded my question wrong, I am looking to output the entire row containing the values. Ex:
ans =
2 23
2 39
2 40
Star Strider

Star Strider (view profile)

on 12 Jul 2019
Try this:
SameCol1 = accumarray(Ix, (1:size(A,1)), [], @(x){A(x,:)});
SameCol1{1}
producing:
ans =
2 23
2 39
2 40
And so for the others.

サインイン to comment.

Translated by