Matlab Novice here - struggling to truncate a column array
15 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Alex Herron
am 10 Jun. 2019
Bearbeitet: Jan
am 11 Jun. 2019
Currently working with a large data set, where one of the columns is a time series of the following format: 1234567.0002.2018.0113
The first 7 digits are an ID number, the next 4 are hour and min, next 4 are year, and the last 4 are month and date. I want to shave this column down to just the month, as this is the only important data point at the moment.
After taking the column out of the original data table, I was able to shorten a single data point, but couldn't apply the same thing to the entire column.
(C is the column)
ex: C{1,1}(18:19) yields the 01 for the first month
However, C{:}(18:19) yields the following error message: "Expected one output from a curly brace or dot indexing expression, but there were 78024 results."
Furthermore, C{1:78024, 18:19} yields "Index in position 2 exceeds array bounds (must not exceed 1)."
Not quite sure how to proceed, and any help is much appreciated!
2 Kommentare
Bob Thompson
am 10 Jun. 2019
Are you cell contents stored as strings? I.e. is 123456.0002.2018.0113 actually '1234567.0002.2018.0113'? If so, I think you would be better off using regexp to split this all at once.
Unfortunately, the error you're running into is because you have your data stored in cells. Any time you have data elements that have non-singular contents working with multiple elements at once is tricky.
Akzeptierte Antwort
Steven Lord
am 10 Jun. 2019
Bearbeitet: Steven Lord
am 10 Jun. 2019
If the data is of a fixed with convert it from a cell array containing char vectors into a string array and use extractBetween.
data = {'1234567.0002.2018.0113'; ...
'8901234.0103.2018.0214'; ...
'8675309.0211.2018.0315'}
dataString = string(data)
monthdata = extractBetween(dataString, 19, 20)
You could convert the string array monthdata into a char array or even a double array.
Another alternative, depending on what you need to do with your time data, would be to extract the appropriate sections from dataString and turn them into a datetime array then ask for the month of that datetime array.
timeAndDateData = extractBetween(dataString, 9, 22)
dt = datetime(timeAndDateData, 'InputFormat', 'HHmm.yyyy.MMdd')
month(dt)
Once you have your datetime array you could consider turning your table into a timetable using table2timetable. This would allow you to perform certain date and time-related operations on the timetable like using retime to change the time basis (for instance, to make your data uniformly spaced in time.)
Weitere Antworten (1)
Jan
am 10 Jun. 2019
cellfun(@(x) x(18:19), C, 'UniformOutput', false)
5 Kommentare
Steven Lord
am 11 Jun. 2019
Use:
find(cellfun(@isempty, data))
to locate cells that are empty. Or if you just want to eliminate those empty cells, omit the find and use the resulting logical array to delete the empty cells or keep the non-empty cells.
Siehe auch
Kategorien
Mehr zu Data Type Conversion finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!