replace a specific strings from multiple columns in a dataframe

I want to replace the strings "aa" and "aaa" in the dataframe below with""

data = data.frame(attr = c(1:4), type1=c('aa','b'), type2=c("aaa", "aa"))

data <- apply(data,2,function(x) gsub("aa",'',x))

gsub takes every aa and gsub(c("aa", "aaa"),'',x) does not work

Asked By: Al14
||

Answer #1:

data <- apply(data,2,function(x) gsub("aa|aaa","",x))
     attr type1 type2
[1,] "1"  ""    ""   
[2,] "2"  "b"   ""   
[3,] "3"  ""    ""   
[4,] "4"  "b"   ""   

You could alternatively use

data <- apply(data,2,function(x) gsub("a{2,3}","",x))
Answered By: denis

Answer #2:

You could just set option fixed = FALSE and delete all the a's.

data <- as.data.frame(apply(data, 2, function(x) gsub("a",'', x, fixed = FALSE)))
data
#   attr type1 type2
# 1    1            
# 2    2     b      
# 3    3            
# 4    4     b  
Answered By: jay.sf

Answer #3:

 dat[2:3] <- lapply(dat[2:3], gsub, pattern = '[a]{2,}', replacement = '')

The result:

> dat
  attr type1 type2
1    1            
2    2     b      
3    3            
4    4     b      

Data used:

dat <- data.frame(attr = c(1:4), type1 = c('aa','b'), type2 = c("aaa", "aa"))
Answered By: h3rm4n

Answer #4:

library(dplyr)
data2 = data %>%
  mutate(type1 = recode(type1, "aa" = "", "aaa" = ""),
         type2 = recode(type2, "aa" = "", "aaa" = ""))

attr type1 type2
1    1            
2    2     b      
3    3            
4    4     b      

if you wanna generalize, taking from @denis answer:

data2 = data %>%
  mutate_all(function(x) gsub("aa|aaa","",x))
Answered By: Leonardo Siqueira
The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .



# More Articles