あなたは数字の配列を持っている場合、一般的に言えば:
a = [4 2 1 8 -2];
パーセンタイルは、最初の配列をソートして、パーセンタイルで供給されたインデックスにアクセスしようとすることにより計算することができます。だから、prctile(a,20)
の機能は、原則的にはしかし、prctile
が少ない配列のサイズに影響された値を取得するには、入力ベクトルを補間空想の魔法の少しを行い
b = sort(a);
ind = round(length(b)*20/100);
if ind==0
ind = 1;
end
b = b(ind);
% b = -2
置き換えることができます。ただし、上記の考え方を使用してパーセンタイル分割列を見つけることができます。上記のように選択した場合、20%パーセンタイルと80%パーセンタイルに対応するヘッダーを取得するには、行をループし、NaNを削除し、残っている値をソートします20パーセンタイルまたは80パーセンタイルの特定のインデックスを取得します。残念ながら、テーブルをサポートしていない古いバージョンのMatlabを使用しているため、ヘッダー名が正しく返されているかどうかを確認することはできませんでしたが、アイデアは明確にする必要があります。
L = cell(size(T,1),1);
U = cell(size(T,1),1);
for row=1:size(T,1)
row_values = T{row,:};
row_values = row_values(2:end); % Remove date column
non_nan_indeces = find(~isnan(row_values));
if not(isempty(non_nan_indeces))
[row_values,sorted_indeces] = sort(row_values(non_nan_indeces));
% The +1 is because we removed the date column
L_ind = non_nan_indeces(sorted_indeces(1:round(0.2*length(row_values))))+1;
U_ind = non_nan_indeces(sorted_indeces(round(0.8*length(row_values)):end))+1;
% I am unsure about this part
L{row} = T.Properties.VariableNames(L_ind);
U{row} = T.Properties.VariableNames(U_ind);
else
L{row} = nan;
U{row} = nan;
end
end;
あなたは、MATLABのprctile
を使用したい場合は、返された値のインデックスは、このような何かやって見つける必要があります:あなたの入力、@lucianopazため
L = cell(size(T,1),1);
U = cell(size(T,1),1);
for row=1:size(T,1)
row_values = T{row,:};
row_values = row_values(2:end); % Remove date column
non_nan_indeces = find(~isnan(row_values));
if not(isempty(non_nan_indeces))
[row_values,sorted_indeces] = sort(row_values(non_nan_indeces));
L_val = prctile(row_values(non_nan_indeces),20);
U_val = prctile(row_values(non_nan_indeces),80);
% The +1 is because we removed the date column
L_ind = non_nan_indeces(sorted_indeces(find(row_values<=L_val)))+1;
U_ind = non_nan_indeces(sorted_indeces(find(row_values>=U_val)))+1;
% I am unsure about this part
L{row} = T.Properties.VariableNames(L_ind);
U{row} = T.Properties.VariableNames(U_ind);
else
L{row} = nan;
U{row} = nan;
end
end;
おかげでたくさん!あなたの上位コードが動作しているようですが、それは奇妙なことに、日付ごとに1つだけティッカー名を返します。コードを調整して各日付の80%(および20%)パーセンタイルを超えるすべてのティッカーを返すように助けてください。事前に感謝します – John
@ジョン、私は正しく理解していないと、20%未満または80%未満の値を持つすべての名前ではなく、20%のパーセンタイルまたは80%のパーセンタイルに等しい値を持つ変数名を取得したいと思った%。変数名のリストを取得するために両方のコードを編集しました。期待して助けてください – lucianopaz
多くの感謝!私はあなたの助けに非常に感謝します! – John