テキストファイルにある値を区別したい
1 view (last 30 days)
Show older comments
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 Comments
Dyuman Joshi
on 22 Nov 2023
Could you please share the text file? Use the paperclip button to attach.
Accepted Answer
Akira Agata
on 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 Comments
Akira Agata
on 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)
More Answers (0)
See Also
Categories
Find more on グラフィックス出力のターゲットの指定 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!