为了简单起见,我将尝试从日常生活中汲取一个例子。假设我在CSV文件中加载了一个名为 dataOriginal 的表,其中包含3列 - 名称,作业,日期。
让我们仔细看看“日期”栏目:
date
____
'13.01.2014 20:34'
'22.03.2014 11:17'
...
我想在日期向量中分割日期,并将此向量(以及每个列的变量名称(因为我们有多个日期,我们事实上已经是矩阵))添加到新表中的列中命名为“日期”,但包含所有命名内容,如年,月等。
这是我到目前为止所做的事情(对于糟糕的代码质量感到遗憾,但我刚开始学习MATLAB: - /):
我将每个日期分成日期向量,并为每个元素添加名称,如下所示:
dateFormat = 'dd.mm.yy HH:MM';
[year,month,day,hour,minute,second] = datevec(datesRaw, dateFormat);
所以我有这个:
year(1) % returns '2014' since this is the first date in my column
year % returns all years in my entire column
然后我将上面的内容转换为表格:
dates = array2table([year,month,day,hour,minute,second],'VariableNames',{'year','month',...,'second'});
所以我得到了一个很好的输出
year month second
____ _____ ... ______
2014 1 0
2014 3 0
... ... ... ...
通过简单地调用例如:
,这使我可以轻松读取每列的访问权限year % returns all years
year(1) % returns first entry's year (here: '2014' from '13.01.2014 20:34')
我已经处理了我的其他列,对这些列进行了各种操作,最后我试图水平连接所有这些:
name job date
____ _____________________ _____________________
year month ... second
____ _____ ______
"Bob" "Construction worker" 2014 1 ... 0
"Alice" "Waitress" 2014 3 ... 0
... ... ... ... ... ...
我正在与名为“date”的单个列中的年,月等嵌套的部分进行精确对比。我想在上面的表格中解决日期元素,如下所示:
myData.name(1) % will return 'Bob'
myData.job(1) % will return 'construction worker'
myData.date(1).year(1) % should return '2014' for Bob, the construction worker
目前我在出汗和咒骂之后有以下代码:
dataFinal =
horzcat(array2table([dataProcessed(:,1),dataProcessed(:,2)],'VariableNames',[dataOriginal.Properties.VariableNames(1),dataOriginalProperties,VariableNames(2)]],
array2table([year,month,day,hour,minute,second],'VariableNames',{'year','month','day','hour','minute','second'}))
,其中
我不知道如何插入
array2table([year,month,day,hour,minute,second],'VariableNames',{'year','month','day','hour','minute','second'})
在命名列“date”中,以实现我的目标。
谢谢!
答案 0 :(得分:0)
请尝试以下操作,它可能正是您所寻找的:
data = table(names, jobs, table(years, months, ...), 'VariableNames', {'name', 'job', 'date'})
虽然您将按如下方式处理,但与您所说的内容略有不同;它可能仍然适用于您的目的:
data.name(1);
data.job(1);
data.date.year(1);
编辑:要查看输出,请执行
disp([data(:, ~strcmp(data.Properties.VariableNames, 'date')), data.date])
names ids years months
_____ ___ _____ ______
'Bob' 1 2014 4
'Max' 2 2013 8
(编辑评论时,我没有完全复制答案中的数据和字段,但我认为你应该明白这一点。)