フィルターのクリア

Sort unique string/number column based on last 2 characters

7 ビュー (過去 30 日間)
Sole
Sole 2020 年 6 月 11 日
コメント済み: Sole 2020 年 6 月 15 日
How do I sort a column based on the last 2 characters while maintaining the unique string/number order? I want each group of unique strings/numbers to be reoriganized based on the last 2 characters in this order:
1. ut, fx, os, st, ng (doesn't matter what the order here)
2. ub
3. uu
4. uj
5. nh
Here's parts of the column (it's actually 67x1 cell)
ap12qw_nh
ap12qw_ub
ap12qw_uj
ap12qw_uu
qw54rt_ub
qw54rt_ut
zx23vb_fx
zx23vb_ng
zx23vb_nh
zx23vb_os
zx23vb_st
zx23vb_ub
zx23vb_uj

採用された回答

the cyclist
the cyclist 2020 年 6 月 11 日
編集済み: the cyclist 2020 年 6 月 11 日
Here is one way:
% The guide to ordering the letter-pairs. (Although the order of the first few letter-pairs
% doesn't matter, it seemed easier to just sort them anyway.)
order_guide = {'ut', 'fx', 'os', 'st', 'ng', 'ub', 'uu', 'uj', 'nh'};
% Input
input = {'ap12qw_nh','ap12qw_ub','ap12qw_uj','ap12qw_uu','zx23vb_fx'}'; % I didn't include them all
% Pull the last two characters of the input
last_two = cellfun(@(x)x(end-1:end),input,'UniformOutput',false);
% Identify which letter-pair the input belongs to, in order
[tf,indexOrder] = ismember(last_two,order_guide);
% Sort the input accordingly
[~,sorting_order] = sort(indexOrder);
sorted_input = input(sorting_order);
  3 件のコメント
the cyclist
the cyclist 2020 年 6 月 11 日
% Guide to ordering the 2-letter code.
order_guide = {'ut', 'fx', 'os', 'st', 'ng', 'ub', 'uu', 'uj', 'nh'};
% Input
input = {
'qw54rt_ut';
'zx23vb_fx';
'zx23vb_os';
'zx23vb_st';
'zx23vb_ng';
'ap12qw_ub';
'qw54rt_ub';
'zx23vb_ub';
'ap12qw_uu';
'ap12qw_uj';
'zx23vb_uj';
'ap12qw_nh';
'zx23vb_nh'};
% Pull the first six characters of the input, and find the unique ones
first_six = cellfun(@(x)x(1:6),input,'UniformOutput',false);
unique_first_six = unique(first_six);
% Pull the last two characters of the input
last_two = cellfun(@(x)x(end-1:end),input,'UniformOutput',false);
% Identify which 6-letter code the input belongs to, in order
[~,index6] = ismember(first_six,unique_first_six);
% Identify which 2-letter code the input belongs to, in order
[~,index2] = ismember(last_two,order_guide);
% Sort the input, first according to 6-letter code, then according to 2-letter code
[~,sorting_order] = sortrows([index6 index2],[1 2]);
sorted_input = input(sorting_order);
Sole
Sole 2020 年 6 月 15 日
You are a genius! It works! That was a wall I hit. I couldn't figure it out. Thank you so much! The part you lost me at was using the sortrow command to simulataneously sort first 6 and last 2, but now it makes so much sense

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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeShifting and Sorting Matrices についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by