I'm trying to replace a certain string in a large data.frame. I just found the following solution but gsub
doesn't preserve the original data.frame layout. How can I achieve this.
I mean I want to replace a string and don't want to change the layout of the df.
Consider this example:
test<-data.frame(a=c("a","b","c","d"),b=c("a","e","g","h"),c=c("i","j","k","a"))
gsub("a","new",test)
Thx
You will want to lapply
through your data.frame
testing for character
or factor
entries and then applying gsub
appropriately. The result will be a list
, but as.data.frame
fixes this.
test$val <- 1:4 # a non character/factor variable
(test2 <- as.data.frame(lapply(test,function(x) if(is.character(x)|is.factor(x)) gsub("a","new",x) else x)))
a b c val
1 new new i 1
2 b e j 2
3 c g k 3
4 d h new 4
class(test2$val) # to see if it is unchanged
[1] "integer"
as.data.frame(sapply(test, function(x) gsub("a", "new", x)))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With