How to extract the months from a datetime table?

10 次查看(过去 30 天)
Hi!
I have a series of dates like this -
I want to create 12 variables naming - January, February, March, April,.., December in a way that each of the month contains the index value from the DateStamp for that month.
For example,
1984-05-02 is index 1, and it be assigned under 'May'.
Similarly, 1984-06-03 is index 2, and it be assigned under 'June'. And so on.
I have attached the DateStamp.mat file. Any feedback will be much appreciated! Thank you so much.

采纳的回答

Stephen23
Stephen23 2023-2-27
编辑:Stephen23 2023-2-27
S = load('DateStamp.mat')
S = struct with fields:
DateStamp: [764×3 table]
T = S.DateStamp;
T.month = T.date;
T.month.Format = 'MMMM'
T = 764×4 table
date x_CloudCover landsat month __________ ____________ _____________ _________ 1984-05-02 0.12 {'landsat_5'} May 1984-06-03 18.49 {'landsat_5'} June 1984-06-19 0 {'landsat_5'} June 1984-09-23 1.49 {'landsat_5'} September 1984-10-09 47.1 {'landsat_5'} October 1984-10-25 7.27 {'landsat_5'} October 1984-11-10 46.36 {'landsat_5'} November 1984-11-26 0.08 {'landsat_5'} November 1985-01-29 0.11 {'landsat_5'} January 1985-04-19 71.61 {'landsat_5'} April 1985-06-22 1.53 {'landsat_5'} June 1985-08-09 0 {'landsat_5'} August 1985-10-12 0 {'landsat_5'} October 1985-10-28 0 {'landsat_5'} October 1986-01-16 16.37 {'landsat_5'} January 1986-02-01 43.73 {'landsat_5'} February
But I am guessing that your actual goal is to perform some kind on analysis on your data, e.g. the means:
M = categorical(datetime(1,1,1,"Format","MMM")+calmonths(0:11));
T.year = T.date.Year;
T.month = M(T.date.Month).';
S = groupsummary(T,["year","month"],"mean","x_CloudCover");
U = unstack(S,"mean_x_CloudCover","month", "GroupingVariables","year")
U = 39×13 table
year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ____ ______ ______ _____ _____ _____ ______ ______ _____ ______ ______ ______ _____ 1984 NaN NaN NaN NaN 0.12 9.245 NaN NaN 1.49 27.185 23.22 NaN 1985 0.11 NaN NaN 71.61 NaN 1.53 NaN 0 NaN 0 NaN NaN 1986 16.37 43.73 NaN NaN 58.07 32.67 35.15 20.3 0 0 NaN NaN 1987 57.67 1.175 0.02 NaN NaN 3.2 NaN 4.2 0.05 38.1 0 11.9 1988 12.78 NaN NaN 1.35 0.32 1.93 32.89 2.15 0 0 27.99 NaN 1989 0.15 52.31 0 16.26 NaN NaN 39.325 27.73 27.95 0 73.26 45.6 1990 NaN NaN NaN NaN 39.08 NaN 31.6 62.61 2.52 0.57 14.19 2.61 1991 42.97 NaN NaN 0.24 42.42 0.05 18.33 23.24 11.95 11.17 0.01 0.43 1992 0.11 19.39 37.41 44.77 0.06 3.2 18.9 NaN NaN 79.05 0.06 0.145 1993 23.675 4.22 NaN 0.18 2.335 23.44 20.35 0 NaN 7.39 NaN NaN 1994 0.36 0.08 NaN 0.56 4.15 NaN 20.115 7.79 7.91 NaN 0 0.28 1995 3.08 25.135 76.31 48.78 NaN 9.47 3.105 0.06 0 16.29 0.15 NaN 1996 9.98 0 0 57.57 NaN NaN 0.1 57.03 NaN NaN 20.15 NaN 1997 30.96 NaN NaN 0.27 46.88 0.13 51.24 0 4.22 NaN NaN 0.05 1998 0.135 0 0 0 NaN 18.545 47.78 5.71 39.99 0 NaN NaN 1999 20.705 29.365 1.495 73.6 0.32 72.77 9.3875 0 47.315 10.918 11.733 0.21
  4 个评论
Ashfaq Ahmed
Ashfaq Ahmed 2023-2-27
编辑:Ashfaq Ahmed 2023-2-27
Hi @Stephen23, That is actually something totally new I learned from your code today. Thank you so much!
I have another data set of 376x268x764 double size. This is essentially the latitude/longitude grid of the temperature list of 764 days. I will have to exract the days based on their months. That's why I was looking for the indices only.
I am only using the date stamps from this DateStamp.mat file.
Ashfaq Ahmed
Ashfaq Ahmed 2023-2-27
编辑:Ashfaq Ahmed 2023-2-27
I am using this code to find out the indices -
T = S.DateStamp;
T.month = T.date;
T.month.Format = 'MMMM';
LIST = string(T.month(1:end));
find(LIST=="May")

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Dates and Time 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by