Extracting a specific row from two different variables

조회 수: 21 (최근 30일)
JAMIE DYSON
JAMIE DYSON 2023년 6월 22일
답변: Kautuk Raj 2023년 6월 27일
I have two different variables lets call them "time" and "type of fruit", I want to extract into separate tables the times when different fruits appear. In the end I would have a table that would contain all the times for apples in a variable, etc...
Additionally, if a fruit that has already been extracted appears further down in the table (after a different fruit) I would like a space in the final tables so I know when a fruit hasnt appeared on the row prior.
I am a novice to MATLAB, but any help or direction with this "question" would be much appreciated
  댓글 수: 1
dpb
dpb 2023년 6월 23일
Not clear to me what your end object is here in how you would intend to use this and particularly the reason for including missing data in a field.
I'd ask why not create the full table (or timetable, maybe) that has both the fruit and the time from which you can use grouping variables to do anything you wish by fruit and/or time without making more variables; just use the data you already have to respond to whatever questions there are to be answered.

댓글을 달려면 로그인하십시오.

답변 (1개)

Kautuk Raj
Kautuk Raj 2023년 6월 27일
You can use MATLAB's logical indexing feature. Here is an example of how you can do this:
Assuming your data is stored in two arrays: "time" and "fruit_type".
First, find the unique fruit types in the "fruit_type" array using the "unique" function:
unique_fruits = unique(fruit_type);
% This will give you an array of the unique fruit types in the data.
Create a cell array to store the separate tables for each fruit type:
fruit_tables = cell(numel(unique_fruits), 1);
This creates a cell array with one cell for each unique fruit type.
Loop through the unique fruit types and extract the times for each fruit:
for i = 1:numel(unique_fruits)
fruit = unique_fruits(i);
fruit_times = time(fruit_type == fruit);
fruit_tables{i} = fruit_times;
end
This loop extracts the times for each unique fruit type and stores them in the corresponding cell of the "fruit_tables" array.
Add a space in the final tables if a fruit hasn't appeared in the previous row:
for i = 1:numel(unique_fruits)
fruit_table = fruit_tables{i};
for j = 2:numel(fruit_table)
if (fruit_table(j) - fruit_table(j-1)) > 1
fruit_table = [fruit_table(1:j-1); NaN; fruit_table(j:end)];
end
end
fruit_tables{i} = fruit_table;
end
This loop checks if there is a gap of more than one between the times in the current fruit table. If there is, it adds a NaN value to the table to indicate the gap.
At the end of this process, the "fruit_tables" cell array will contain separate tables for each fruit type, with gaps indicated where a fruit has not appeared in the previous row. You can access the tables for each fruit type using array indexing, for example:
apple_table = fruit_tables{1};
banana_table = fruit_tables{2};
Note that this is just an example implementation and the specific details of the data and desired output may require adjustments to this code.

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

제품


릴리스

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by