Nice
April 27, 2020, 5:03pm
1
Hello everyone,
My question might seem easy, but I have tried several things but still nothing works….!
I have a column, lets say called "a", that contains several thousands of "words".
What I want to do is to choose only those rows, where the value of "a" STARTS WITH "AC01".
I have tried the filter-function, but the problem is that it returns all rows CONTAINING "AC01", which sometimes is inside the word, but I only want the word when it starts with "AC01"
Anybody have any idea?
Best regards….
You need to use a regular expression that checks whether the substring of interest is at the start of the string. So, for example...
library(dplyr)
df <- data.frame(a = c("AC01Waq7", "AC2-wiggle", "AC01hithere"),
stringsAsFactors = FALSE)
print(df)
a
1 AC01Waq7
2 AC2-wiggle
3 AC01hithere
filter(df, grepl("^AC01*", a))
a
1 AC01Waq7
2 AC01hithere
Or, if you want to stay in the tidyverse
...
library(stringr)
filter(df, str_detect(a, "^AC01*"))
Nice
April 28, 2020, 9:49am
3
Thank you very much @ulfelder !
Although it seems my results become more correct if I dont type the Asterix (*) in the end
My Best Regards!
Nice
April 28, 2020, 10:01am
4
Then another question, please.... what if I want to change all the values that start with "A01" to fx "BB"?
@Nice , do you mean change the whole string to "BB", or just replace the "A01" with "BB"?
Nice
April 28, 2020, 5:25pm
6
@ulfelder
I mean change the WHOLE string that starts with "A01" to "BB" . I am considering "ifelse"....but there might be better options...?
@Nice , I don't see anything wrong with using ifelse
. Something like...
mutate(df, a2 = ifelse(str_detect(a, "^AC01"), "BB", a))
Or, in base R...
df$a2 <- with(df, ifelse(grepl("^AC01", a), "BB", a))
system
Closed
May 19, 2020, 6:43pm
8
This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.