テキストファイルにある値を区別したい
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
N-Value P,S-Velocity Density
(m/s) (g/cm^3)
----------------------------------------------------------------------------------
1m 2 360 78 1.80
2m 13 360 78 1.68
3m 14 360 130 1.72
4m 4 360 130 1.71
5m 2 1600 130 1.68
6m 5 1600 130 1.71
7m 13 1600 130 1.88
8m 6 1600 130 1.89
9m 7 1600 130 1.90
10m 22 1600 130 1.90
11m 27 1600 200 1.89
12m 24 1600 200 1.87
13m 17 1600 200 1.87
14m 12 1600 200 1.86
15m 11 1600 200 1.85
16m 20 1600 200 1.89
17m 29 1600 200 1.90
18m 26 1600 200 1.92
19m 24 1600 200 1.82
20m 26 1600 200 1.85
これがテキストファイルにあるデータです.(This is data of text file.)
はじめに1mの上は空白になっているが深さ(depth)のヘッダー,N-Valueは N 値のヘッダー、P-Velocity (m/s)はP波速度のヘッダー、S-Velocity (m/s)はS波のヘッダー、Density (g/cm^3)は密度のヘッダー、値は深さ,N値、P波速度、S波速度、密度の値でそれらをヘッダーに合わせ一つ一つ分類したいです。
最適なコードがわからないのでご享受ください.
2 Commenti
Dyuman Joshi
il 22 Nov 2023
Could you please share the text file? Use the paperclip button to attach.
Risposta accettata
Akira Agata
il 22 Nov 2023
添付のテキストを拝見しましたが、標準的な構成ではないためやや工夫が必要です。
% データ部分だけを読み込む
url = "https://jp.mathworks.com/matlabcentral/answers/uploaded_files/1546487/AIC001.txt";
t = readtable(url, ...
"NumHeaderLines", 3, ...
"ReadVariableNames", false);
% 不要な列を削除
t(:,6:end) = [];
% 列名を設定
t.Properties.VariableNames = ...
{'Depth [m]', 'N-Value', 'P-Velocity [m/s]', ...
'S-Velocity [m/s]', 'Density [g/cm^3]'};
% Depth の列が文字列のため数値に変換
t.("Depth [m]") = str2double(erase(t.("Depth [m]"), 'm'));
% 可視化してみる
figure
semilogy(t.("Depth [m]"), t{:,2:end})
legend(t.Properties.VariableNames{2:end})
xlabel("Depth [m]", "FontSize", 14)
3 Commenti
Akira Agata
il 26 Nov 2023
N-Value から Density までの値がない行の検出は、ismissing や isnan を使うと for ループや if~else を使う必要がないため便利です。たとえば以下のようにすると、N-Value から Density までの値がない行を除去することができます(コメント頂いた「...値がない場合そのDepthの値を読み込まない」を、その行を除去することと解釈しました)。
ちなみに、以下はValue から Density まで「すべての」値がない行を除去するものです。もしValue から Density まで「いずれかの」値がない行を除去する場合は、以下コードの all を any に変更して下さい。
% 欠損を含むサンプルデータ
load sample.mat
% 表示
disp(t)
% N-Value ~ Density に対応する 2 ~ 5 列目を確認
idx = ismissing(t(:,2:5));
% N-Value ~ Density すべてが欠損している行のインデックス
dim = 2;
idx = all(idx, dim);
% 対象の行を除去
t(idx, :) = [];
% 結果を表示
disp(t)
Più risposte (0)
Vedere anche
Categorie
Scopri di più su グラフィックス出力のターゲットの指定 in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!