Filename to categorical in table
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I created a datastore with accelerometer data of different files (S1_walking.csv, S1_sitting.csv and S1_laying.csv). Then I used to readall function to create a table with all data together.
Now, I want to add an categorical column containing a specific part of the file names to the corresponding part in the table. So next to every row of the 'walking data' a categorical 'walking' should be added, next to every row of 'sitting data' a categorical 'sitting' and next to every row of 'laying data' categorical 'laying'.
How can I do this easily by using the part of the filenames?
1 Kommentar
Mathieu NOE
am 16 Okt. 2020
I guess you want t make a string manipulation like this :
this will return 1 , so you can use it to fulfill (tick) the condition
filename = 'S1_walking.csv'
walking_tick = ~isempty(findstr(filename,'walking'))
Antworten (1)
Seth Furman
am 16 Okt. 2020
Bearbeitet: Seth Furman
am 16 Okt. 2020
Assuming we know which rows contain data from each file, we can create a categorical variable and add it directly to the table.
For example,
>> % Here we assume 'data' is our table.
>> % Rows 1-3 are 'walking data', 4-8 are 'sitting data', and 9-16 are 'laying data'.
>> data = table((1:16)')
data =
16×1 table
Var1
____
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>> files = ["S1_walking.csv" "S1_sitting.csv" "S1_laying.csv"];
>> data.SourceFile = categorical([repmat(1,3,1);repmat(2,5,1);repmat(3,8,1)],[1 2 3],files)
data =
16×2 table
Var1 SourceFile
____ ______________
1 S1_walking.csv
2 S1_walking.csv
3 S1_walking.csv
4 S1_sitting.csv
5 S1_sitting.csv
6 S1_sitting.csv
7 S1_sitting.csv
8 S1_sitting.csv
9 S1_laying.csv
10 S1_laying.csv
11 S1_laying.csv
12 S1_laying.csv
13 S1_laying.csv
14 S1_laying.csv
15 S1_laying.csv
16 S1_laying.csv
Alternatively, we could add the categorical filename data by calling transform on the datastore with a custom transform function.
ds = datastore("sampleDir");
ds = transform(ds,@transformFcn,"IncludeInfo",true);
data = readall(ds)
function [data,dsInfo] = transformFcn(data,dsInfo)
[~,filename] = fileparts(dsInfo.Filename);
data.SourceFile = categorical(repmat(string(filename),height(data),1));
end
In my case this outputs the following
data =
16×2 table
Var1 SourceFile
____ __________
5 S1_laying
6 S1_laying
7 S1_laying
8 S1_laying
9 S1_laying
10 S1_laying
5 S1_sitting
6 S1_sitting
7 S1_sitting
8 S1_sitting
9 S1_sitting
10 S1_sitting
1 S1_walking
2 S1_walking
3 S1_walking
4 S1_walking
0 Kommentare
Siehe auch
Kategorien
Mehr zu Text Files finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!