Skip to content

remove rows of a matrix by part of its row name

3 messages · Ahmed Serag, Rui Barradas, William Dunlap

#
Dear R-experts,


How can I remove a certain feature or observation by a part of its name. To be clear, I have a matrix with 766 observations as a rows. The row names are like this

70/556
71.1/280
72.1/556
72.1/343
73.1/390
73.1/556
Now I would like to remove all the rows that contain the text 73.1

Any ideas or suggestion please ?


Regards




**********************

Ahmed Serag

Analytical Chemistry Department

Faculty of Pharmacy

Al-Azhar University

Cairo

Egypt
#
Hello,

Use grep to get the row indices and then subset with a *negative* index 
to remove those rows.

rn <- scan(what = character(), text = "
70/556
71.1/280
72.1/556
72.1/343
73.1/390
73.1/556
")

mat <- matrix(rnorm(6*6), nrow = 6)
row.names(mat) <- rn

inx <- grep("73\\.", row.names(mat))

new_mat <- mat[-inx, ]
new_mat


Hope this helps,

Rui Barradas
On 5/22/2018 11:48 AM, Ahmed Serag wrote:
#
I think it is simpler to use !grepl() instead of -grep() here, since
subscripting with logicals works properly when there are no matches.
Also, since mat is a matrix, add the argument drop=FALSE so the
result is a matrix when all but one rows are omitted.  E.g.,
dimnames=list(c("One","Two","Three"),c("A","B")))
row wanted
 Named int [1:2] 1 4
 - attr(*, "names")= chr [1:2] "A" "B"
unwanted rows
 int[0 , 1:2]
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:2] "A" "B"
matrix if only one row wanted
 int [1, 1:2] 1 4
 - attr(*, "dimnames")=List of 2
  ..$ : chr "One"
  ..$ : chr [1:2] "A" "B"
is no unwanted rows
 int [1:3, 1:2] 1 2 3 4 5 6
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:3] "One" "Two" "Three"
  ..$ : chr [1:2] "A" "B"



Bill Dunlap
TIBCO Software
wdunlap tibco.com
On Tue, May 22, 2018 at 4:34 AM, Rui Barradas <ruipbarradas at sapo.pt> wrote: