如何在Matlab中将面板数据转为cell并同步剔除同城市跨字段NaN值
Matlab 非平衡面板数据按城市拆分剔除共缺失值方法
实现思路
直接按城市遍历两个变量的重排矩阵,同步校验同一城市所有变量的非缺失位置,提取共有的有效行后存入cell,不需要提前删除全表缺失行,避免打乱原有结构。
具体代码实现
% 前置准备:你已经得到reshape后的两个矩阵 % mPopulation:行数=年度数量,列数=城市数量,人口矩阵 % mArea:行数=年度数量,列数=城市数量,面积矩阵 city_num = size(mPopulation,2); % 获取城市总数 cPopulation = cell(1,city_num); % 初始化人口cell,每个元素存对应城市的有效人口序列 cArea = cell(1,city_num); % 初始化面积cell,每个元素存对应城市的有效面积序列 for i = 1:city_num % 提取当前城市的两个变量序列,找到同时不为NaN的行索引 valid_idx = ~isnan(mPopulation(:,i)) & ~isnan(mArea(:,i)); % 提取有效行存入对应cell cPopulation{i} = mPopulation(valid_idx,i); cArea{i} = mArea(valid_idx,i); end
结果验证
以上代码运行后:
cPopulation{1}对应纽约的有效人口:[140;151],共2行cArea{1}对应纽约的有效面积:[22;22],和人口行数完全一致cPopulation{2}对应波士顿的有效人口:[75;76;77],共3行cArea{2}对应波士顿的有效面积:[11;10.5;10],和人口行数完全一致- 芝加哥的两个变量序列也会自动剔除2002年面积缺失的行,保留3行有效数据
完全符合你需要的输出要求。
拓展说明
如果后续新增更多变量(比如GDP、失业率等),只需要修改valid_idx的判断逻辑,把所有变量的非缺失条件用&拼接即可,无需改动其他结构。
内容的提问来源于stack exchange,提问作者IceAloe
相关产品推荐
相关产品推荐

