# Finding a last digits

Dear all,
I just wanted to know if there is a way to find out last digit or first digit in a numeric values using R? like the one we have with LEFT, RIGHT functions in excel?

BR, M

Hi @kmmukesh, welcome to RStudio Community.

The `stringr` package has functions that can help you accomplish this. Here's an illustration using the built-in `mtcars` data set.

``````library(stringr)

mtcars\$disp
#>  [1] 160.0 160.0 108.0 258.0 360.0 225.0 360.0 146.7 140.8 167.6 167.6 275.8
#> [13] 275.8 275.8 472.0 460.0 440.0  78.7  75.7  71.1 120.1 318.0 304.0 350.0
#> [25] 400.0  79.0 120.3  95.1 351.0 145.0 301.0 121.0

# Get first digit of the disp variable for each car.
str_extract(mtcars\$disp, "^\\d")
#>  [1] "1" "1" "1" "2" "3" "2" "3" "1" "1" "1" "1" "2" "2" "2" "4" "4" "4" "7" "7"
#> [20] "7" "1" "3" "3" "3" "4" "7" "1" "9" "3" "1" "3" "1"

# Get last integer digit of the disp variable for each car.
str_extract(mtcars\$disp, "\\d\$")
#>  [1] "0" "0" "8" "8" "0" "5" "0" "7" "8" "6" "6" "8" "8" "8" "2" "0" "0" "7" "7"
#> [20] "1" "1" "8" "4" "0" "0" "9" "3" "1" "1" "5" "1" "1"

# Get last decimal digit of the disp variable for each car.
str_match(mtcars\$disp, "\\.(\\d\$)")[, 2]
#>  [1] NA  NA  NA  NA  NA  NA  NA  "7" "8" "6" "6" "8" "8" "8" NA  NA  NA  "7" "7"
#> [20] "1" "1" NA  NA  NA  NA  NA  "3" "1" NA  NA  NA  NA

# An alternate approach that is similar to Excel's LEFT and RIGHT functions.

# Get first digit of the disp variable for each car.
str_sub(mtcars\$disp, start = 1L, end = 1L)
#>  [1] "1" "1" "1" "2" "3" "2" "3" "1" "1" "1" "1" "2" "2" "2" "4" "4" "4" "7" "7"
#> [20] "7" "1" "3" "3" "3" "4" "7" "1" "9" "3" "1" "3" "1"

# Get last integer digit of the disp variable for each car (only works correctly
# if each number is of the same length).
str_sub(mtcars\$disp, start = 3L, end = 3L)
#>  [1] "0" "0" "8" "8" "0" "5" "0" "6" "0" "7" "7" "5" "5" "5" "2" "0" "0" "." "."
#> [20] "." "0" "8" "4" "0" "0" ""  "0" "." "1" "5" "1" "1"

# Get last decimal digit of the disp variable for each car (only works correctly
# if each number is of the same length).
str_sub(mtcars\$disp, start = 5L, end = 5L)
#>  [1] ""  ""  ""  ""  ""  ""  ""  "7" "8" "6" "6" "8" "8" "8" ""  ""  ""  ""  ""
#> [20] ""  "1" ""  ""  ""  ""  ""  "3" ""  ""  ""  ""  ""
``````

Created on 2020-03-23 by the reprex package (v0.3.0)

Thanks, Sid. It helps!

Great! If I solved your query, would you mind marking my post as a solution?