Join/Append tables and keep particular table variable if duplicate rows

13 ビュー (過去 30 日間)
Marcus Glover
Marcus Glover 2023 年 2 月 20 日
編集済み: Marcus Glover 2023 年 2 月 20 日
I have a an ecxel table that is updated inside excel after being generated in MATLAB with a column of some user text comments- these comments are not always present. I would like to add new rows and often duplicate rows to this table, but the new/duplicate rows will never contain comments. In the event there is a duplicate row added for the key variables, I would like to preserve the comment from the excel file if it is present, otherwise it will remain or be created as blank.
Not sure the best approach here- my various attempts at joins are not working well.
Here is an example of the excel file with comments and some new data containing duplicate rows:
excel=readtable('commented.xlsx')
excel = 6×4 table
Date Time Value Comment ____________ __________ _____ _____________ {'20220912'} {'015304'} 0.1 {0×0 char } {'20220912'} {'172427'} 0 {0×0 char } {'20220914'} {'002824'} -0.7 {0×0 char } {'20220915'} {'042702'} -0.7 {'Windy Day'} {'20220915'} {'170959'} 0.2 {0×0 char } {'20220916'} {'231015'} -0.9 {0×0 char }
load newdata.mat
newdata
newdata = 6×3 table
Date Time Value ____________ __________ _____ {'20220913'} {'087626'} -0.4 {'20220914'} {'002824'} -0.7 {'20220915'} {'042702'} -0.7 {'20220915'} {'170959'} 0.2 {'20220916'} {'231015'} -0.9 {'20220917'} {'115816'} -0.8
The answer would look like this- all new rows from newdata are addded, but when there are duplicate Date/Time that have a comment, that comment is preserved, ('20220915' '042702' would keep the 'Windy Day' comment) Otherwise, the Comment variable is an empty char cell.
load answer
answer
answer = 8×4 table
Date Time Value Comment ____________ __________ _____ _____________ {'20220912'} {'015304'} 0.1 {0×0 char } {'20220912'} {'172427'} 0 {0×0 char } {'20220913'} {'087626'} -0.4 {0×0 char } {'20220914'} {'002824'} -0.7 {0×0 char } {'20220915'} {'042702'} -0.7 {'Windy Day'} {'20220915'} {'170959'} 0.2 {0×0 char } {'20220916'} {'231015'} -0.9 {0×0 char } {'20220917'} {'115816'} -0.8 {0×0 char }
  4 件のコメント
Jan
Jan 2023 年 2 月 20 日
@Marcus Glover: The example from your last comment is the result of a standard concatenation. But in the original question joining two tables with 6 elements does not create a table with 12 elements. So what should be removed?
Marcus Glover
Marcus Glover 2023 年 2 月 20 日
編集済み: Marcus Glover 2023 年 2 月 20 日
Thanks. Your questions have given me the answer. I do just want to remove the four rows in the newdata table that have duplicate rows in the excel table. The I do not need a join at all and can just concatenate as you suggest after creating a dummy variable 'Comment' for those that are not duplicate rows.

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

採用された回答

Marcus Glover
Marcus Glover 2023 年 2 月 20 日
Jan's question led me to the answer.
commented=readtable('commented.xlsx');
load newdata.mat;
load answer;
% eliminate duplicate rows
idx = ismember(newdata(:,1:3), commented(:,1:3));
newdata(idx,:)=[];
% Create a new variable with class cell and contents 0x0 char
newVar = cell(height(newdata), 1);
newVar(:) = {''};
newdata.Comment = newVar
newdata = 2×4 table
Date Time Value Comment ____________ __________ _____ __________ {'20220913'} {'087626'} -0.4 {0×0 char} {'20220917'} {'115816'} -0.8 {0×0 char}
answer2=sortrows([newdata; commented],[1 2])
answer2 = 8×4 table
Date Time Value Comment ____________ __________ _____ _____________ {'20220912'} {'015304'} 0.1 {0×0 char } {'20220912'} {'172427'} 0 {0×0 char } {'20220913'} {'087626'} -0.4 {0×0 char } {'20220914'} {'002824'} -0.7 {0×0 char } {'20220915'} {'042702'} -0.7 {'Windy Day'} {'20220915'} {'170959'} 0.2 {0×0 char } {'20220916'} {'231015'} -0.9 {0×0 char } {'20220917'} {'115816'} -0.8 {0×0 char }

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeTables についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by