I want to filter out the rows of a table which contain '*' in the string value of the column. Checking just that column.
string_name = c("aaaaa", "bbbbb", "ccccc", "dddd*", "eee*eee")
zz <- sapply(tx$variant_full_name, function(x) {substrRight(x, -1) =="*"})
Error in FUN(c("Agno I30N", "VP2 E17Q", "VP2 I204*", "VP3 I85F", "VP1 K73R", :
could not find function "substrRight"
The 4th value of zz should be TRUE by this.
in python there is endswith function for strings [ string_s.endswith('*') ] Is there something similar to that in R ?
Also, is it problem because of '*' as a character as it means any character ? grepl also not working.
> grepl("*^",'dddd*')
[1] TRUE
> grepl("*^",'dddd')
[1] TRUE
*
is a quantifier in regular expressions. It tells the regular expression engine to attempt to match the preceding token "zero or more times". To match a literal, you need to precede it with two backslashes or place inside of a character class [*]
. To check if the string ends with a specific pattern, use the end of string $
anchor.
> grepl('\\*$', c('aaaaa', 'bbbbb', 'ccccc', 'dddd*', 'eee*eee'))
# [1] FALSE FALSE FALSE TRUE FALSE
You can simply do this without implementing a regular expression in base R:
> x <- c('aaaaa', 'bbbbb', 'ccccc', 'dddd*', 'eee*eee')
> substr(x, nchar(x)-1+1, nchar(x)) == '*'
# [1] FALSE FALSE FALSE TRUE FALSE