What are R stringr alternatives to following Matlab string manipulations using patterns?

Viewed 60

I am new to R and trying to find alternatives to following Matlab string manipulations in R (preferably using stringr and not pure regex). Can someone please help.

itrDay - a numeric iterator

VariableNames - a string vector (column names from a table)
extractBefore(VariableNames,"_"+itrDay+textBoundary)
contains(VariableNames,["_"+digitsPattern+"min_bouts_","_"+digitsPattern+"min_freq_"])

This is what I have written now. But these are incomplete and not the same as Matlab expressions above

# how I can bring Matlab textBoundary to here
str_remove(VariableNames,str_c("_",itrDay)) 
# is this ok?
str_detect(VariableNames,c(str_c("_","\\d+","min_bouts_"),str_c("_","\\d+","min_freq_")))

Inputs:

itrDay=2
VariableNames=["Walk_2","Walk_2min_bouts_2","Lie_2","Lie_2min_bouts_2"]
VariableNames2=["Leisure_Sit_3min_bouts_TL","Leisure_Sit_min_bouts_TL","Leisure_Move_10min_freq_H","Leisure_Move_min_freq_H"]

Outputs (Matlab):

extractBefore(VariableNames,"_"+itrDay+textBoundary)

"Walk"    "Walk_2min_bouts"    "Lie"    "Lie_2min_bouts"

contains(VariableNames2,["_"+digitsPattern+"min_bouts_","_"+digitsPattern+"min_freq_"])
1   0   1   0

Output (R)

str_remove(VariableNames,str_c("_",itrDay))
"Walk"   "Walkmin_bouts_2"     "Lie"     "Liemin_bouts_2" 
str_detect(VariableNames2,c(str_c("_","\\d+","min_bouts_"),str_c("_","\\d+","min_freq_")))
[1]  TRUE FALSE FALSE FALSE
1 Answers

For the first part, you could use

library(stringr)

itrDay <- 2
VariableNames <- c("Walk_2","Walk_2min_bouts_2","Lie_2","Lie_2min_bouts_2")

pattern <- paste0("(_", itrDay, ")$")

str_remove(VariableNames, pattern)
#> [1] "Walk"            "Walk_2min_bouts" "Lie"             "Lie_2min_bouts" 

We create a pattern out of itrDay and use it as a regular expression. The pattern "(_2)$" removes _2 at the end of each string.

VariableNames2 <- str_remove(VariableNames, pattern)

str_detect(VariableNames2, "_\\d+min_(bouts|freq)")
#> [1] FALSE  TRUE FALSE  TRUE

Note: Since we removed _2 in the first step, we changed the search pattern for step two and removed the last _.

Related