R 删除矩阵中包含所有NaN行的行和列

R 删除矩阵中包含所有NaN行的行和列,r,R,我有以下格式的数据 [,1] [,2] [,3] [1,] 2 NaN 7 [2,] NaN NaN NaN [3,] 3 NaN 2 我想删除第2行和第2列。当我试着 mat <- mat[complete.cases(mat)] mat试试这个 mat[rowSums(!is.nan(mat))>0,] # [,1] [,2] [,3] #[1,] 2 NaN 7 #[2,] 3 N

我有以下格式的数据

     [,1] [,2] [,3] 
[1,]    2    NaN    7 
[2,]    NaN  NaN    NaN 
[3,]    3    NaN    2
我想删除第2行和第2列。当我试着

mat <- mat[complete.cases(mat)]
mat试试这个

mat[rowSums(!is.nan(mat))>0,]
#    [,1] [,2] [,3]
#[1,]    2  NaN    7
#[2,]    3  NaN    2

 mat[,colSums(!is.nan(mat))>0]
 #     [,1] [,2]
 #[1,]    2    7
 #[2,]  NaN  NaN
 #[3,]    3    2
合并时

mat[rowSums(!is.nan(mat))>0,colSums(!is.nan(mat))>0]
#     [,1] [,2]
#[1,]    2    7
#[2,]    3    2
数据
mat这应该可以:


mat在这种情况下,您的NaN对称放置,留下一个漂亮的2 x 2残差矩阵。情况可能并非总是如此

您需要做的实际上需要两个步骤(找到非NaN的,然后重建新矩阵),但可以组合成一个合理的线性

newMat <- matrix( mat[!is.na(mat)], nrow=2 ,  ncol=2)

newMat您可以尝试
mat[is.nan(mat)]0,]
,类似于对列
mat[,colSums(!is.nan(mat))>0]
同样,当我使用mat时,我想自动检测新行数和新列数的唯一方法是执行@akrun提到的基本操作
newMat <- matrix( mat[!is.na(mat)], nrow=2 ,  ncol=2)