爲了簡單起見,我將嘗試以日常生活爲例。比方說,我有一個CSV文件中的表格加載在名爲的dataOriginal中,並帶有3列 - 名稱,作業,日期。MATLAB - array2table嵌套
讓我們在列「日期」仔細一看:
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'}))
其中
- dataProcessed(:,1)是我處理的名稱
- dataProcessed(:,2)是我的處理作業
- dataOriginal.Properties.VariableNames(1)是我原始表中第一列的名稱 - 「名稱」
- dataOriginal.Properties。VariableNames(2)是第二列在我的原始表的名字 - 「工作」
我不知道如何插入
array2table([year,month,day,hour,minute,second],'VariableNames',{'year','month','day','hour','minute','second'})
在名爲「約會」
爲了完成我的目標。
謝謝!
嗨。感謝您的快速回復。尋址的方式好得多(data.date.year(1))。我是這樣寫的,因爲我假設這是它的工作原理。您的代碼會返回錯誤「變量名屬性必須包含表中每個變量的一個名稱 表(行304)中的錯誤 t = setVarNames(t,vnames);%錯誤如果無效,重複或空」 – rbaleksandar 2014-12-04 08:03:40
沒關係。我在主表中沒有變量的情況下進行了2次table()調用,但正如您已經指出的那樣,不需要這些調用。它工作完美!非常感謝!最後一個問題是 - 是否有可能使MATLAB實際產生與我在原始文章中想象的相同的輸出? Rigth現在在「日期」欄下,控制檯只顯示每個日期元素的[1x6表格]。我也想看看嵌套表格內部,但是在調用大表格時。有可能這樣做嗎? – rbaleksandar 2014-12-04 08:10:02
編輯評論給你類似的東西,但不完全一樣。完全按照上面指定的方式獲取顯示將需要自定義功能,我想。它可能是一個相當簡單的函數,它使用了一些巧妙的遞歸來處理日期列中的表格。 – KevinMc 2014-12-05 07:30:38