2017-10-13 124 views
0

我有一些空行和空列的矩阵。我想将空行和列全部移动到右侧和底部矩阵的末端。如何将特定行移动到R中矩阵的末尾?

我设法获得所有空行的rownames和列名。

什么,我试图做的:

  1. 做一个for循环,删除掉基于索引的所有行和列(因为空行更改后的每个顺序删除不工作,所以我放弃了这个想法)
  2. 根据行名称的属性删除行。

Cnew = Cnew[!(Cnew$rownames %in% empty_rownames)]

似乎无法得到它的工作虽然...

回答

0

假设您有一个6x6矩阵,其中一个空列和一个空行(意味着它们的所有条目都是NA

Cnew <- matrix(nrow = 6, ncol = 6, data = 1) 

Cnew[,4] <- NA 
Cnew[3,] <- NA 

empty.columns <- which(colSums(Cnew, na.rm = TRUE) == 0) 
empty.rows <- which(rowSums(Cnew, na.rm = TRUE) == 0) 

# we first delete the row and cols 

# for deleting do 
Cdel <- Cnew[-empty.rows,-empty.columns] 

# and then paste the rows and cols at the edges again 
Cdel <- cbind(Cdel, rep(NA, length(empty.columns))) 
Cdel <- rbind(Cdel, rep(NA, length(empty.rows))) 
0

如果只是为了删除行(观察)与NA值在一些列的

test <-matrix( 
    c(rep(c(NA, 1:9), 8) ), 
    nrow=10, 
    ncol=8) 
test <- test[complete.cases(test),]