將多列重塑為單元格

我有一個city-year級數據的不平衡面板。在用nan填充缺失的值之后,我將數據作為列導入matlab。例如:

city     year      population       area
nyc      2000        140             22
nyc      2001        151             22
nyc      2002        NaN             22.5 
nyc      2003        NaN             22.5
boston   2000        NaN             10
boston   2001        75              11
boston   2002        76              10.5
boston   2003        77              10   
chicago  2000        43              34
chicago  2001        42              31
chicago  2002        43              NaN
chicago  2003        45              34

我可以把每一列重塑成一個矩陣,其中一列代表一個城市。例如:mPopulation = reshape(population,[4,3])給出

140  NaN  43
151  75   42
NaN  76   43
NaN  77   45

類似地,mArea = reshape(area,[4,3])給出

22     10    34
22     11    34
22.5   10.5  NaN
22.5   10    34

注意,(1)mPopulationmArea在不同的位置有NaN(2) 在一個矩陣中,不同的城市有不同數量的缺失值。

以后的分析無法對丟失的值執行,因此我認為需要將每一列重新格式化為一個單元格,因為它允許具有不同行數的列。

因此,問題是(1)如何將矩陣轉化為單元(2) 如何在不同的單元格中刪除同一城市的缺失值,使每個單元格在同一城市中具有相同的行數?

我們想要得到的最終結果是兩個單元格cPopulationcArea

140  75   43
151  76   42
     77   45        

and

22    11       34
22    10.5     34
      10       34          

您可以看到,由于nyc-2002和nyc-2003的人口缺失,我們還刪除了這兩年紐約市的面積數據。以這種方式刪除丟失的條目后,紐約只剩下2行數據,而波士頓和芝加哥只有3行數據。所以最終的數據不能存儲在矩陣中。。。

EDIT

另一種方法是,首先從主矩陣中刪除缺少的值:

city     year      population       area
nyc      2000        140             22
nyc      2001        151             22
boston   2001        75              11
boston   2002        76              10.5
boston   2003        77              10   
chicago  2000        43              34
chicago  2001        42              31
chicago  2003        45              34

但是,很難將每一列轉換為一個單元格。由于不同的城市已經有不同的行數,我們不能使用reshape命令,也就是說,不能告訴matlab每個城市的行數是4-by-3。。。

? 最佳回答:

在回答之前,我應該說@cris-luengo注釋是一個更好的主意,我還建議處理NaN,而不是使用單元格數組。

然而,一種方法是:

data = readtable('path\to\data');
cleanedData = data(~any(isnan(data{:, {'population', 'area'}}), 2), :);
[uniqueCities, ~, cityId] = unique(cleanedData.city, 'stable');
cPopulation = arrayfun(@(x) cleanedData.population(cityId == x), 1:length(uniqueCities), 'uni', 0);
cArea = arrayfun(@(x) cleanedData.area(cityId == x), 1:length(uniqueCities), 'uni', 0);

在這里,我們首先創建一個新的數據副本,如果populationareaNaN,則刪除其中的行。

接下來,我們使用unique函數的第三個輸出來創建一個向量,標識表中唯一城市的位置。

最后,使用arrayfun函數提取所需的數據,通過傳遞name-value對unifalse指定輸出應該是一個單元格數組

主站蜘蛛池模板: 亚洲熟妇av一区二区三区| 无码毛片一区二区三区视频免费播放| 人妻内射一区二区在线视频| 波多野结衣高清一区二区三区| 精品动漫一区二区无遮挡| 久久精品一区二区国产| 亚洲国产激情一区二区三区| 亚洲欧美日韩中文字幕一区二区三区 | 无码中文字幕乱码一区| 日韩人妻精品一区二区三区视频| 精品视频在线观看一区二区三区| 亚洲精品精华液一区二区 | 国产伦一区二区三区高清| 日本精品视频一区二区三区| AA区一区二区三无码精片| 人妻无码久久一区二区三区免费| 国精品无码一区二区三区在线 | 日韩福利视频一区| 国产精品久久久久一区二区三区 | 免费观看一区二区三区| 国产婷婷一区二区三区| 国产色精品vr一区区三区| 中文字幕一区视频一线| 国模精品一区二区三区| 久久久久久免费一区二区三区| 中文字幕国产一区| 一区二区三区精品| 亚洲国产一区国产亚洲| 精品一区精品二区制服| 亚洲日韩国产一区二区三区在线| 亚洲精品色播一区二区| 国产成人一区二区三区免费视频| 日本在线电影一区二区三区| 精品一区二区三区3d动漫| 国产激情一区二区三区| 午夜DV内射一区二区| 国产精品综合AV一区二区国产馆| 四虎成人精品一区二区免费网站 | 成人无号精品一区二区三区 | 亚洲AV无码一区二区二三区软件| 亚洲AV成人一区二区三区AV|