3

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

4 Answers 4

4
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))
Sign up to request clarification or add additional context in comments.

Comments

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"))

Comments

3
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))

1 Comment

You should include library(tidyverse) or whatever so anyone reading the OP can run your code.
1

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  

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.