Is there any way to subset data based on column names starting with any particular string?

Suppose I have columns like ABC_1 ABC_2 ABC_3 and others like XYZ_1, XYZ_2, XYZ_3

How to subset the data frame based on columns containing either ABC OR XYZ?

I don't want to use indices since the columns are too scattered in data.

Also, how do I include only rows from each of these columns where any of their value will be >0
Apr 26, 2018 6,094 views

## 1 answer to this question.

You can use grepl on the names of data frame.

grepl matches a regular expression to a target and returns TRUE if a match is found and FALSE otherwise.

```#  Data
data <- data.frame( ABC_1 = runif(3),
ABC_2 = runif(3),
XYZ_1 = runif(3),
XYZ_2 = runif(3) )

#      ABC_1     ABC_2     XYZ_1     XYZ_2
#1 0.3792645 0.3614199 0.9793573 0.7139381
#2 0.1313246 0.9746691 0.7276705 0.0126057
#3 0.7282680 0.6518444 0.9531389 0.9673290

#  Use grepl
data[ , grepl( "ABC" , names( data ) ) ]
#      ABC_1     ABC_2
#1 0.3792645 0.3614199
#2 0.1313246 0.9746691
#3 0.7282680 0.6518444

#  grepl returns logical vector
grepl( "ABC" , names( data ) )
#[1]  TRUE  TRUE FALSE FALSE```

To answer the second part of the question, make the subset data.frame and then make a vector that indexes the rows to keep (a logical vector)

```set.seed(1)
data <- data.frame( ABC_1 = sample(0:1,3,repl = TRUE),
ABC_2 = sample(0:1,3,repl = TRUE),
XYZ_1 = sample(0:1,3,repl = TRUE),
XYZ_2 = sample(0:1,3,repl = TRUE) )

# We want to discard the second row because 'all' ABC values are 0:
#  ABC_1 ABC_2 XYZ_1 XYZ_2
#1     0     1     1     0
#2     0     0     1     0
#3     1     1     1     0

data1 <- data[ , grepl( "ABC" , names( data ) ) ]

ind <- apply( data1 , 1 , function(x) any( x > 0 ) )

data1[ ind , ]
#  ABC_1 ABC_2
#1     0     1
#3     1     1```
• 6,370 points

## How to use a function to repeat a set of procedures on specific set of columns in a data frame?

You can parse the strings to symbols. ...READ MORE

## How can I use parallel so that it preserves the list of data frames

You can use pmap as follows: nc <- ...READ MORE

## How to spilt a column of a data frame into multiple columns

it is easily achievable by using "stringr" ...READ MORE

+1 vote

## How to change column names of a Data frame?

Hi, To change the name of a column ...READ MORE

## Any filter based on conditional criteria in r?

Consider a data frame like this: #Create DF ...READ MORE

## Big Data transformations with R

Dear Koushik, Hope you are doing great. You can ...READ MORE

## Finding frequency of observations in R

You can use the "dplyr" package to ...READ MORE

+1 vote