我有一个单元格数组(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'[] [] [] [] []
答案 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中完全为空的所有行。