删除单元格数组中的空行

时间:2015-08-04 19:51:57

标签: arrays matlab cell-array

我有一个单元格数组(10001x21),其中前3列在所有行中都有数据。从列4 to 21我有数据在特定行的某些单元格中,某些行可能完全为空。

我想只保留4 to 21中某些列中包含数据的行,并删除列(4:21)中没有任何数据的所有空行。在这种情况下,任何帮助都会受到赞赏。谢谢。

这是在Matlab环境中

这是数据的外观

'1Fb6'2014'F'[] [] [] [] [] [] [] [] [] []
'1Fc6'2014'F'[] [] [] [] [] [] [] [] [] []
'1Fd6'2014'F'[] [] [] [] []'ka1'[] [] [] []
'1Fk6'2014'F'[] [] [] [] [] [] [] [] [] []
'1Fy6'2014'F'[] [] [] [] [] [] [] [] [] []
'1Fz6'2014'F'[] []'na1'[] [] [] [] [] [] []
'1Fj6'2014'F'[] [] [] [] [] [] [] [] [] []
'1Fm6'2014'F'[] [] [] [] [] [] [] [] [] []
'1Fn6'2014'F'[] [] [] []'bo1'[] [] [] [] []

1 个答案:

答案 0 :(得分:2)

我们假设您的单元格数组名为SELECT afa.AddressClientID ,MAX(aft.AccountID) ,SUM(aft.Units) FROM AFS_TransUnit aft INNER JOIN AFS_Account afa ON aft.AccountID = afa.AccountID GROUP BY afa.AddressClientID HAVING SUM(aft.Units) > 100 AND MAX(aft.AccountID) IN ( -- Gets accounts which only have non post statuses -- This gets the unique accountIDs which only have transactions with Y status, -- and removes any which have both Y and N. SELECT DISTINCT accountid FROM afs_trans a WHERE [STATUS] NOT IN ('POSTPEND','POSTWAIT') AND a.accountid IN ( SELECT t.accountid FROM ( SELECT accountid ,max(isallocated) AS maxvalue ,min(isallocated) AS minvalue FROM afs_trans GROUP BY accountid ) t WHERE t.maxvalue = 'Y' AND t.minvalue = 'Y' ) ) ,维度为data。您只能使用以下代码在名为[rows, columns]的新矩阵中保留列4:21中包含某些数据的所有行:

new_data

要解决这个问题:

  • new_data = data(~all(cellfun('isempty', data(:, 4:21)), 2), :); 返回大小为cellfun('isempty', data(:, 4:21))的矩阵。列4:21中[rows, columns-3]中的任何空单元格都标记为1,所有其他单元格标记为0。
  • data返回大小为~all(cellfun(...), 2)的向量。它采用此前一个矩阵,并查看每行是否是所有1的单元格数组(换句话说,如果此行完全为空)。如果行全为1,则rows x 1函数返回true。但是,由于NOT运算符(〜),所有只有1的行实际上标记为0,所有其他行标记为1.换句话说,标记为1的行是我们希望保留的行。
  • all只返回数据矩阵,删除列4:21中完全为空的所有行。
相关问题