【发布时间】:2014-12-03 21:59:00
【问题描述】:
为了简单起见,我将尝试从日常生活中举一个例子。假设我在一个名为 dataOriginal 的表中加载了一个 CSV 文件中的表,其中包含 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 ... ... ... ... ... ...
我正在努力解决将年、月等嵌套在一个名为“日期”的列中的部分。我想对上表中的日期元素进行如下处理:
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'}))
在哪里
- dataProcessed(:,1) 是我处理后的名称
- dataProcessed(:,2) 是我处理的作业
- dataOriginal.Properties.VariableNames(1) 是我原始表中第一列的名称 - “名称”
- dataOriginal.Properties.VariableNames(2) 是我原始表中第二列的名称 - “job”
不知道怎么插入
array2table([year,month,day,hour,minute,second],'VariableNames',{'year','month','day','hour','minute','second'})
在命名列“日期”中以实现我的目标。
谢谢!
【问题讨论】:
标签: arrays matlab concatenation