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)