You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 02:48:03