【发布时间】:2014-07-07 05:40:28
【问题描述】:
我的工作区中有许多大型数据集数组(从 .mat 文件加载)。
一个最小的工作示例是这样的
>> disp(old_ds)
Date firm1 firm2 firm3 firm4
734692 880,0 102,1 32,7 204,2
734695 880,0 102,0 30,9 196,4
734696 880,0 100,0 30,9 200,2
734697 880,0 101,4 30,9 200,2
734698 880,0 100,8 30,9 202,2
第一行(带有字符串)已经是数据集中的标题,也就是说,如果我运行old_ds.Properties.VarNames,它们已经显示出来。
我想知道是否有一种简单和/或快速的方法可以将第一列设为 ObsNames。
作为第一种方法,我考虑“导出”数据矩阵(示例中的第 2 到 5 列)、日期向量,然后创建一个新数据集,其中行有名称。 即:
>> mat = double(old_ds(:,2:5)); % taking the data, making it a matrix array
>> head = old_ds.Properties.VarNames % saving headers
>> head(1,1) = []; % getting rid of 'Date' from head
>> dates = dataset2cell(old_ds(:,1)); % taking dates as column cell array
>> dates(1) = []; % getting rid of 'Date' from dates
>> new_ds = mat2dataset(mat,'VarNames',head,'ObsNames',dates);
除了最后一行返回以下错误之外,...
Error using setobsnames (line 25)
NEWNAMES must be a nonempty string or a cell array of nonempty strings.
Error in dataset (line 377)
a = setobsnames(a,obsnamesArg);
Error in mat2dataset (line 75)
d = dataset(vars{:},args{:});
...我会找到一个解决方案,然后创建一个函数(例如概括我拥有的所有 22 个数据集数组的过程),然后运行该函数 22 次(每个数据集数组一次)。 从长远来看,每个数据集有 7660 行和 2 到 1320 的列数。
我不知道如何(如果可以的话)使数据集直接“吃掉”第一列作为 ObsNames。
谁能给我一个提示?
编辑:附上 sample file。
【问题讨论】:
-
你能上传一个示例文件吗?
-
@Cici,我编辑了我的问题以包含指向示例文件的链接(最后一行)。希望你能帮忙。谢谢!
-
无法打开您的文件...也许尝试在保存时添加 -v7.3 标签?
-
@Cici,链接已更新,新文件已使用 -v7.3 标签保存。感谢您的帮助。