tableにフィルターをかけて特定の行だけを抽出したい(Forを使わずに)
조회 수: 100 (최근 30일)
이전 댓글 표시
やりたいこと
9853 x 4の以下のtableがあります。
test =
ID value_a value_b value_c
1 8 9 4
2 5 7 2
3 7 9 3
4 8 1 2
5 3 9 6
. . . .
. . . .
9853 5 6 8
このtableから特定のIDを持つ行だけを抽出したいです。
たとえば、ID=1, 3の行を抽出する場合は、
ID value_a value_b value_c
1 8 9 4
3 7 9 3
としたいのです。
IDが2つであれば問題ありませんが、
多数のID、例えば
ID = 1, 5, 8, 9, 13, ...... 753, 986, ......1587, 1689, ...... 9850
といった数千以上のIDを持つ行だけを抽出したいです。
For文を使わずにスマートに抽出する方法はないでしょうか?
ご教示ください。
私の説明に不明な点があれば聞いてください。
よろしくお願いします。
댓글 수: 0
채택된 답변
Kojiro Saito
2020년 9월 30일
以下のようなやり方で抽出できます。
ここではidsに抽出したいIDを抜粋して[]で括っていますが、実際の数千のIDを直書きするか、ファイルから読み取るなどしてみてください。
ids = [1, 5, 8, 9, 13, 9850];
index = test.ID == ids; % indexに9853×(idsの要素数)の0 or 1が格納されます。
row = find(sum(index, 2)); % sumで行ごとにマージして9853×1の0 or 1の行列にし、findで非0(1の値)を持つ行数を抽出
extractedData = test(row, :); % IDがidsと一致する行のデータのみ抽出
댓글 수: 3
Akira Agata
2020년 9월 30일
別のやり方として、ismember 関数を使う方法もあります。
ids = [1, 5, 8, 9, 13, 9850]; % 抽出したいID
idx = ismember(test.ID, ids); % idxに9853×1の0 or 1が格納されます(test.IDがidsの要素なら1)。
extractedData = test(idx,:); % IDがidsのいずれかと一致する行のデータのみ抽出
추가 답변 (0개)
참고 항목
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!