首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MATLAB中根据日期戳累积观测值

在MATLAB中根据日期戳累积观测值
EN

Stack Overflow用户
提问于 2015-05-22 03:04:59
回答 1查看 49关注 0票数 0

如果我有以下数据集

代码语言:javascript
复制
A =

20061201         100
20061201          10
20061201           9
20061202          15
20061202          50
20061204          40
20061204          16
20061204          12

column 1有日期,而columns 2有相应的观测值,其中.对应于没有观测值。

我希望输出结果是这样的

代码语言:javascript
复制
row 1: 20061201  100 10 9 
row 2: 20061202   15 50 .
row 3: 20061204   40 16 12  

我该怎么做呢,有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2015-05-22 09:35:16

使用uniqueaccumarray

代码语言:javascript
复制
[uVals,~,subs] = unique(A(:,1));
out = [num2cell(uVals), accumarray(subs,A(:,2),[],@(x) {x.'})]

你的样本输入:

代码语言:javascript
复制
>> A

A =

20061201         100
20061201          10
20061201           9
20061202          15
20061202          50
20061204          40
20061204          16
20061204          12

结果:

代码语言:javascript
复制
>> out

out =  

[20061201]    [1x3 double]
[20061202]    [1x2 double]
[20061204]    [1x3 double]

我使用了cell-Array作为输出。在这种情况下,您不必将.填充到有缺陷的行。如果想要显示特定的单元格,可以使用{}而不是(),如下所示。

代码语言:javascript
复制
>> out{1,2}

ans =

100    10     9

>> out{2,2}

ans =

15    50

我还建议您使用NaN(非数字)填充而不是.

代码语言:javascript
复制
[uVals,~,subs] = unique(A(:,1));
valC = accumarray(subs,A(:,2),[],@(x) {x.'});
maxSize = max(cellfun(@numel,valC));
valMat = cellfun(@(x) [x nan(1,maxSize-numel(x))],valC,'uni',0);
valMat = vertcat(valMat{:});
out = [uVals, valMat];

示例输入的结果:

代码语言:javascript
复制
>> out

out =

20061201         100          10           9
20061202          15          50         NaN
20061204          40          16          12
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30382266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档