user6633625673888
user6633625673888

Reputation: 635

R list character removal

lst1 is a list:

lst1 <- list(c("all the apples", "apples in the tables", "fashion prosthetics"),  c("meteorological concepts", "effects of climate change", "environmental"))

I want to preserve the list structure and remove the last s from all the words. The desired answer is the list below:

> lst1
[[1]]
[1] "all the apple"      "apple in the table" "nature"            

[[2]]
[1] "meteorological concept"   "effect of climate change"
[3] "environmental" 

I tried

gsub("\\'s|s$|s[[:space:]]{0}","",lst1)

but it is not preserving the list structure.

How can it be done?

Upvotes: 4

Views: 96

Answers (3)

Pierre L
Pierre L

Reputation: 28441

Simpler regex:

lapply(lst1, function(x) gsub('s\\b', '', x))

Results in:

[[1]]
[1] "all the apple"      "apple in the table" "fashion prosthetic"

[[2]]
[1] "meteorological concept"   "effect of climate change"
[3] "environmental" 

Upvotes: 1

Neal Fultz
Neal Fultz

Reputation: 9687

Same solution, different regex, using a non-capturing group to leave whitespace as is:

> lapply(lst1, gsub, pattern="s(?= |$)", replacement="", perl=TRUE)
[[1]]
[1] "all the apple"      "apple in the table" "fashion prosthetic"

[[2]]
[1] "meteorological concept"   "effect of climate change" "environmental"           

Upvotes: 1

akrun
akrun

Reputation: 887148

You can use gsub with lapply to loop over the list elements

lapply(lst1, gsub, pattern= "\\'s|s$|s\\b", replacement='')
#[[1]]
#[1] "all the apple"       "apple  in the table" "fashion prosthetic" 

#[[2]]
#[1] "meteorological concept"    "effect  of climate change"
#[3] "environmental"    

Upvotes: 3

Related Questions