How to remove rows from data frame who's row name contains a specific string

I have a data frame with many rows. Some of the row names have ".1" after the name. Like "XYZ",. "XYZ.1" "ABC", "ABC.1"

How can I remove all the rows that have ".1" at the end?

Thanks!

Do you mean something like this?

library(tidyverse)

# original
df <- tibble(x = c("aaa", "aab", "aac"),
       y = c("aa.1", "bb.1", "ccc"))

> df
# A tibble: 3 × 2
  x     y    
  <chr> <chr>
1 aaa   aa.1 
2 aab   bb.1 
3 aac   ccc  

# filtered
df %>% 
  filter(!str_detect(y, ".1"))

# A tibble: 1 × 2
  x     y    
  <chr> <chr>
1 aac   ccc  

Next time, please provide a reproducible example.

1 Like

Well not exactly, what is in the row doesn't matter; this operation is to be done on the row names themselves;

In your example the row names are 1 2 3. If the rows were

1
2.1
3

I would need to remove the row 2.1

Seven Mercedes, gone!

library(tidyverse)
mtcars |> filter(!str_detect(rownames(mtcars), "Merc"))
#>                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#> Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
#> Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
#> Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
#> Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
#> Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
#> Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
#> Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
#> Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
#> Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
#> Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
#> Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
#> Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
#> Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
#> Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
#> Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
#> AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
#> Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
#> Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
#> Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
#> Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
#> Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
#> Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
#> Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
#> Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
#> Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2

Created on 2022-04-14 by the reprex package (v2.0.1)

What is this syntax here... the "|>" supposed to be?

mtcars |> filter(!str_detect(rownames(mtcars), "Merc"))

Also I am trying this on my matrix and I receive the following error:

Final.Mat.test <- Final.Mat %>% filter(!str_detect(Final.Mat, ".1"))
Error in UseMethod("filter") : 
  no applicable method for 'filter' applied to an object of class "c('matrix', 'array', 'double', 'numeric')"

I thought you were using a data frame with row names. Is that incorrect? Filter( ) cannot be used on a matrix.

The |> is the new native pipe operator. The magrittr pipe (%>%) will be fine.

This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.