我的数据格式为
[,1] [,2] [,3]
[1,] 2 NaN 7
[2,] NaN NaN NaN
[3,] 3 NaN 2
当我尝试
时,我想删除第2行和第2列mat <- mat[complete.cases(mat)]
它会删除所有案例(因为它们都不完整)。
有没有一种简单的方法可以做到这一点,除了用零替换NaN并对零和列进行一些数学运算,然后对行进行相同的处理?
答案 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;通过重力到位。