【问题标题】:Matlab: Filter a timetable to balance a panel dataMatlab:过滤时间表以平衡面板数据
【发布时间】:2021-02-22 17:34:54
【问题描述】:

我有一个时间表,我想保留那些与我的变量“Id”中的每个值一致的日子。在我放在这里的例子中,我从我的时间表 T 开始,其中有三个不同的“Id”。我的目标是最终得到一个时间表 T_1,其中仅保留每个“Id”之间日期重合的观察结果。

T= timetable(datetime({'13/04/2018';'25/04/2018';'28/04/2018';'13/04/2018';'25/04/2018';'13/04/2018'}), [1;1;1;2;2;3],[30;29;45;21;24;8] );
T.Properties.VariableNames = {'Id' 'Price'}

%I want to get:

T_1=timetable(datetime({'13/04/2018';'13/04/2018';'13/04/2018'}), [1;2;3],[30;21;8] );

如果你能帮助我,我将非常感激!

【问题讨论】:

    标签: matlab filter extract panel-data timetable


    【解决方案1】:

    你可以使用

    T_1 = T('13/04/2018',:);
    

    我建议您阅读docs 关于timerange 和一般时间表。

    如果要将时间表拆分为多个较小的时间表,可以按日期选择它们,并将它们存储在一个元胞数组中:

    T_unique = unique(T.Time); % get all unique dates
    T_all = cell(size(T_unique)); % init an empty cell array
    for k = 1:numel(T_unique)
        T_all{k} = T(T_unique(k),:); % and put the timetable for one date in the cell array
    end
    

    【讨论】:

    • 谢谢@rinkert,但这只是一个例子。实际上我有一个很大的时间表(大小 47000 * 11)所以主要目的是 Matlab 识别出现在所有“Id”中的日期并创建一个新的时间表,其中只有那些日期和变量链接。按照您的建议,不可能按日期执行此日期。
    • @AntoineFa 我是这么认为的,但请在问题中说明这一点。查看更新,这会起作用,但很可能您想使用 splitapply 之类的函数来确定每个日期
    猜你喜欢
    • 2016-06-07
    • 2020-06-07
    • 2013-07-27
    • 2021-08-25
    • 2014-10-30
    • 2023-03-03
    • 2021-06-01
    • 2017-01-19
    • 2020-01-13
    相关资源
    最近更新 更多