Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to remove rows of a matrix by row name, rather than numerical index?

I have matrix g:

> g[1:5,1:5]         rs7510853 rs10154488 rs12159982 rs2844887 rs2844888 NA06985 "CC"      "CC"       "CC"       "CC"      "CC"      NA06991 "CC"      "CC"       "CC"       "CC"      "CC"      NA06993 "CC"      "CC"       "CC"       "CC"      "CC"      NA06994 "CC"      "CC"       "CC"       "CC"      "CC"      NA07000 "CC"      "CC"       "CC"       "CC"      "CC"      > rownames(g)[1:2]->remove > remove [1] "NA06985" "NA06991" > g[-remove,] 

Error in -remove : invalid argument to unary operator

Is there a simple way to do what I want to do here (remove the ID's referenced in the vector 'remove' from matrix g?

Note: this is just a model for what I actually want to do, please don't say just do g[-(1:2), ], I need to be able to remove a whole bunch of rows that I have ID-d.

like image 670
JoshDG Avatar asked Sep 27 '11 21:09

JoshDG


People also ask

How do you delete rows and columns in a matrix?

The easiest way to remove a row or column from a matrix is to set that row or column equal to a pair of empty square brackets [] . For example, create a 4-by-4 matrix and remove the second row. Now remove the third column.

How do I remove column names from a matrix in R?

To remove the row names or column names from a matrix, we just need to set them to NULL, in this way all the names will be nullified.


1 Answers

When working with indexing, you cannot use "negative" character vectors. You can convert to logical with %in%

g[!rownames(g) %in% remove, ]  # ! is logical negation 

If you really wanted to use negative-indexing this could be done:

g[-which(rownames(g) %in% remove), ] #which converts to numeric, so minus sign OK 

... however it has a nasty potential erroneous result that arises when there are not any rownames in the target vector. The result may be no values returned.

like image 117
IRTFM Avatar answered Sep 21 '22 14:09

IRTFM