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

基于Unit列唯一ID将CSV数据拆分至对应新表的技术实现问询

基于Unit列唯一ID将CSV数据拆分至对应新表的技术实现问询

嘿,看起来你已经成功搞定了唯一Unit ID的提取工作,接下来就是把原数据按这些ID拆分到不同的子表里对吧?我来给你梳理下后续的实现方法,顺便优化下你现有的代码~

首先先把你已经完成的提取唯一ID的代码整理成更规范的格式:

% 读取CSV文件为表
data = readtable('Input/Wales_Interim_23/Pembrokeshire_23_Finished.csv');

% 处理Reg_ID提取Unit字段
unit_str = string(data.Reg_ID);
split = cellfun(@(x) strsplit(x, '_'), unit_str, 'UniformOutput', false);
split_unit_cell = cell2table(split);
split_unit = splitvars(split_unit_cell);
unit = table2array(split_unit(:,1));
data.Unit = unit;

% 获取唯一的Unit ID
Ids = unique(data.Unit);
NID = numel(Ids);

核心实现:按Unit ID拆分数据到子表

这里最推荐的方式是用结构体来存储所有子表,这样后续管理和调用都很方便,不会产生一堆零散的变量。具体代码如下:

% 创建结构体存储各Unit对应的子表
unitTables = struct();

% 遍历每个唯一ID,筛选对应行并存储
for i = 1:NID
    currentId = Ids(i);
    % 筛选当前Unit的所有行,存入结构体对应字段
    unitTables.(currentId) = data(data.Unit == currentId, :);
end

完成后你就可以通过unitTables.8c12.11或者unitTables.(Ids(1))这类方式,直接访问对应Unit的完整子表啦。

如果你确实需要把每个子表存成单独的工作区变量(不推荐,变量过多会增加管理成本),也可以用eval实现,但要注意这种方式容易引发命名冲突等问题,谨慎使用:

for i = 1:NID
    currentId = Ids(i);
    % 动态生成变量名并赋值
    eval([currentId, ' = data(data.Unit == currentId, :);']);
end

小优化:简化Unit字段的提取逻辑

你之前提取Unit字段的代码有点绕,其实用MATLAB的extractBefore函数可以一行搞定,代码更简洁易读:

data.Unit = extractBefore(string(data.Reg_ID), '_');

这行代码直接从Reg_ID中提取下划线前的内容,完全替代原来的cellfun拆分、转表等一系列操作~

备注:内容来源于stack exchange,提问作者Adam Johns

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 12:22:38