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

时间:2015-03-13 17:09:30

标签: r

我的数据格式为

     [,1] [,2] [,3] 
[1,]    2    NaN    7 
[2,]    NaN  NaN    NaN 
[3,]    3    NaN    2

当我尝试

时,我想删除第2行和第2列
mat <- mat[complete.cases(mat)]

它会删除所有案例(因为它们都不完整)。

有没有一种简单的方法可以做到这一点,除了用零替换NaN并对零和列进行一些数学运算,然后对行进行相同的处理?

3 个答案:

答案 0 :(得分:2)

试试这个

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 <- matrix(c(2, NaN, 3, NaN, NaN, NaN, 7, NaN, 2), ncol=3)

答案 1 :(得分:0)

这应该有效:

mat&lt; - mat [-2,-2]

答案 2 :(得分:0)

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

你需要做的事情确实需要两个动作(找到非NaN&#39; s,然后重建新的矩阵),但可以组合成一个合理的单行。

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

请注意,当我们索引NaN时,我们正在从结果向量中逐列构建新矩阵。我们不得不从头开始构建第二个矩阵。我们的新矩阵不会下降&#39;通过重力到位。