ML_Enthousiast
ML_Enthousiast

Reputation: 1269

Remove rows for multiple dataframes having a name matching a pattern

I am trying to remove the first 9 rows of multiple dataframes that have the same structures but different names (keeping similar name structure). In my example, there are 4 dataframes with respectively the names Mydataframe_A, Mydataframe_B, Mydataframe_C, Mydataframe_D.

Currently it is working with the following code:

`Mydataframe_A`<- `Mydataframe_A`[-c(1:9),]
`Mydataframe_B`<- `Mydataframe_B`[-c(1:9),]
`Mydataframe_C`<- `Mydataframe_C`[-c(1:9),]
`Mydataframe_D`<- `Mydataframe_D`[-c(1:9),]

But I would like to write this is with only one line and not having to specify each time each name of dataframe.

I think this could work by using a pattern name and lists because for example this is what I am doing to rbind different dataframes:

All_mydataframes <- rbindlist(mget(ls(pattern = "^Mydataframe_")))

Any idea on how to do this ?

Thanks a ton!

Upvotes: 0

Views: 38

Answers (1)

akash87
akash87

Reputation: 3994

Since mget turns this into a list, you can use apply family functions:

rbindlist(lapply(mget(ls(pattern = "^Mydataframe_")), function(x) x[-c(1:9), ]))

This takes the list from mget and removes the first 9 rows, then rbind it from list to data.table. The only problem is you can't differentiate what data.frame the original data was part of.

Upvotes: 1

Related Questions