rstringlocate

Locate position of first number in string [R]


How can I create a function in R that locates the word position of the first number in a string?

For example:

string1 <- "Hello I'd like to extract where the first 1010 is in this string"
#desired_output for string1
9

string2 <- "80111 is in this string"
#desired_output for string2
1

string3 <- "extract where the first 97865 is in this string"
#desired_output for string3
5

Solution

  • Here is a way to return your desired output:

    library(stringr)
    min(which(!is.na(suppressWarnings(as.numeric(str_split(string, " ", simplify = TRUE))))))
    

    This is how it works:

    str_split(string, " ", simplify = TRUE) # converts your string to a vector/matrix, splitting at space
    
    as.numeric(...) # tries to convert each element to a number, returning NA when it fails
    
    suppressWarnings(...) # suppresses the warnings generated by as.numeric
    
    !is.na(...) # returns true for the values that are not NA (i.e. the numbers)
    
    which(...) # returns the position for each TRUE values
    
    min(...) # returns the first position
    

    The output:

    min(which(!is.na(suppressWarnings(as.numeric(str_split(string1, " ", simplify = TRUE))))))
    [1] 9
    min(which(!is.na(suppressWarnings(as.numeric(str_split(string2, " ", simplify = TRUE))))))
    [1] 1
    min(which(!is.na(suppressWarnings(as.numeric(str_split(string3, " ", simplify = TRUE))))))
    [1] 5