我有一个类似于以下内容的数据集:
year month daynum hour depth wtemp
1989 5 136 0 0.01 14.32
1989 5 136 0 0.5 14.32
1989 5 136 0 1 13.52
1989 5 136 0 2 12.31
1989 5 136 0 3 10.16
1989 5 136 0 4 8.61
1989 5 136 0 6 6.86
1989 5 136 0 8 6.03
1989 5 136 0 10 5.45
1989 5 136 1 0.01 13.38
1989 5 136 1 0.5 13.41
1989 5 136 1 1 13.12
1989 5 136 1 2 10.88
1989 5 136 1 3 10.09
1989 5 136 1 4 9.09
1989 5 136 1 6 7.24
1989 5 136 1 8 6.45
1989 5 136 1 10 5.67
1989 5 136 2 0.01 13.2
1989 5 136 2 0.5 13.24
1989 5 136 2 1 13.24
1989 5 136 2 2 11.07
1989 5 136 2 3 10.14
1989 5 136 2 4 9.02
1989 5 136 2 6 7.23
1989 5 136 2 8 6.23
1989 5 136 2 10 5.59
1989 5 136 3 0.01 13.11
1989 5 136 3 0.5 13.15
1989 5 136 3 1 13.11
1989 5 136 3 2 11.26
1989 5 136 3 3 10.25
1989 5 136 3 4 9.2
1989 5 136 3 6 6.99
1989 5 136 3 8 5.96
1989 5 136 3 10 5.5
此数据集包含超过1,000,000行数据。当我将数据导入matlab时,我留下了这种结构(虽然没有标题)。我想知道如何返回每个时间段的最小和最大深度(即第5列)的指数?
这种情况下的答案如下:
1,9
10,18,
and so on.
请记住,在整个调查期间,测量次数和深度次数会有所不同,因此我必须使用年,月,日,小时和深度的信息。
这里的主要目的是建立一个矩阵,其中仅包含每小时最小和最大深度记录的温度。
到目前为止,我已经尝试过(数据是矩阵的名称):
[~,~,b] = unique(data(:,1:4),'rows');
MaxMin_temp = [abs(accumarray(b,data(:,end),[],@min)), abs(accumarray(b,data(:,end),[],@max))];
返回每个日的最小和最大深度的温度。由此我希望有一种更复杂的方法来获取这些值的整个列。
答案 0 :(得分:1)
使用datenum
为每个时间段指定一个整数索引
然后,您可以使用accumarray
两次:一次使用@min
,一次使用@max
作为"累积"用于计算深度或温度列的分箱值的最小值(最大值)。