テーブルで変数への代入や変数の作成を行うには、テーブルの高さと行数が一致していなければなりません。
Show older comments
こんにちは。
1)7✕2のセルを作成し、セルの1列目に完成させたいtableを、2列目に抽出したい情報があるtableをいれてあります。
2)1日毎にセルの行を分けて格納しているため、どの行も同じ型のtableです。
3)しかし、5行目のデータだけ以下のようにエラーになってしまいます。
どの変数(列)も、最終行までデータがあるのですが、このデータだけ上手くいかず困ってしまいました。
原因がわかるかたがいらっしゃいましたら教えて下さい。
D = cell(7,2); % 格納セルの作成
for k = 1:7
% data2を日付毎にセル1列目に格納
idx = data2.DATE == sprintf('2021/07/0%d',k+1);
D{k,1} = data2(idx,:);
% NavlogのtimeTblを日付毎にセル2列目に格納
idxx = timeTbl.Date == sprintf('2021/07/0%d',k+1);
D{k,2} = timeTbl(idxx,:);
% data2に緯度経度をNavlogのtimeTblから抽出
D{k,1}.Latitude = D{k,2}.Latitude(D{k,1}.timestamp_JST);
D{k,1}.Longitude = D{k,2}.Longitude(D{k,1}.timestamp_JST);
end
5行目の1列目が860252✕26列となっていますが、27〜29列目に、セル2列目からタイムスタンプを基準にデータを抽出する流れです。

↓以下はセル5行1列目のtableの最下部です。どの列も最終行までデータが入っているのですが、なぜこのエラーがでるのかが分かりません。。

7 Comments
こんにちは。下記のようなindexingを行っていますが、本当に意図したものでしょうか?
a = 1:10
'2021/07/01' == '2031/08/02'
a('2021/07/01' == '2031/08/02')
Yu
on 25 Sep 2021
Atsushi Ueno
on 25 Sep 2021
Edited: Atsushi Ueno
on 25 Sep 2021
>そのためのindexingだったのですが、どこかまずい点がありましたでしょうか?
もう少し具体的に説明致します。
idx = data2.DATE == sprintf('2021/07/0%d',k+1);
D{k,1} = data2(idx,:);
上記1行目が動作する場合、data2.DATEは文字列(数値ベクトル)と断定できます。←×
(追記:上記認識は誤り、datetime型は文字列の日付時間と一致性判断可(文字単位の一致性ではない))
恐らく「(今年)7/2〜8の全データ」なのでidxの値はlogical([1 1 1 1 1 1 1 1 1 1])かlogical([1 1 1 1 1 1 1 1 1 0])のどちらかになるのでしょう。
data2(logical([1 1 1 1 1 1 1 1 1 1]),:)はdata2の1行目から10行目を選択している事に、
data2(logical([1 1 1 1 1 1 1 1 1 0]),:)はdata2の1行目から9行目を選択している事になります。
このようなindexingは本当に意図したものでしょうか?
Yu
on 25 Sep 2021
Atsushi Ueno
on 25 Sep 2021
データの型を教えて頂きありがとうございます。
datetime型ですかなるほど...更にテーブル内の全要素と==で比較出来るんですね。
Atsushi Ueno
on 25 Sep 2021
なるほど、以前excelのvlookupについて質問されていましたが、今それが必要なのですね。
Yu
on 25 Sep 2021
Accepted Answer
More Answers (0)
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!