# R substr & substring Functions | Examples: Remove, Replace, Match in String

In this R tutorial, I’ll show you how to apply the **substr and substring functions**. I’ll explain both functions in the same article, since the **R syntax and the output** of the two functions is very similar. You will learn in which situation you should use which of the two functions.

**Basic R Syntax:**

substr(x, start = 2, stop = 5) substring(x, first = 2, last = 5) |

substr(x, start = 2, stop = 5) substring(x, first = 2, last = 5)

Both, the **R substr and substring functions** extract or replace substrings in a character vector.

The basic R syntax for the substr and substring functions is illustrated above. In the following R tutorial, I’m going to show you **five examples** for the usage of substr and substring in the R programming language.

So without further ado, let’s get started…

## Example 1: Extract Substring of Character Vector via substr() & substring()

In the first example, I’m going to show you the probably most popular application of substr and substring: The extraction of some letters of a character vector.

Let’s create such a character vector first:

x1 <- "hello this is a string" # Create example vector |

x1 <- "hello this is a string" # Create example vector

Our example vector consists of the simple sentence *“hello this is a string”*, stored in the character object *x1*.

We can apply the substr and substring R commands as follows:

substr(x1, start = 7, stop = 13) # Apply substr # "this is" substring(x1, first = 7, last = 13) # Apply substring # "this is" |

substr(x1, start = 7, stop = 13) # Apply substr # "this is" substring(x1, first = 7, last = 13) # Apply substring # "this is"

As you can see, both functions return the same output to the RStudio console: *“this is”*.

Question: How did we do that?

Answer: Within both functions **we specified a starting (i.e. 7) and a finishing point (i.e. 13)**, between which we extracted all letters of our data object *x1*.

Note that in case of substr the starting point is called *start* and the finishing point is called *stop*; and in case of substring the starting point is called *start* and the finishing point is called *last*.

So, if the two functions return the same output, what is actually the difference between substr and substring?

One of these differences, I’m going to show you in Example 2…

## Example 2: Character Vector From Certain Position to the Right

Let’s assume that we want to print everything of our character vector after a certain position. If we remove the stop condition in substr…

substr(x1, start = 7) # Apply substr without stop condition |

substr(x1, start = 7) # Apply substr without stop condition

…we get an error:

**Figure 1: Error in substr: argument “stop” is missing, with no default.**

However, if we **remove the last option** in substring, we get what we want:

substring(x1, first = 7) # Apply substring without last condition # "this is a string" |

substring(x1, first = 7) # Apply substring without last condition # "this is a string"

Why does this work?

The reason is that substring has a default value for the last option: *last = 1000000L*. If we don’t specify last, this value is used. Since our example vector is shorter than 1000000L, the whole rest of the vector after position 7 is printed.

## Example 3: Replace Substring with substr() & substring()

Another popular usage of the substr and substring R functions is the replacement of certain characters in a string.

This is again something we can do with both functions. Let’s first duplicate our example vector twice…

x2a <- x1 # Duplicate vector for 3rd example x2b <- x1 # Another duplicate |

x2a <- x1 # Duplicate vector for 3rd example x2b <- x1 # Another duplicate

…and the let’s use substr()…

substr(x2a, start = 1, stop = 5) <- "heyho" # Replace first word via substr function x2a # "heyho this is a string" |

substr(x2a, start = 1, stop = 5) <- "heyho" # Replace first word via substr function x2a # "heyho this is a string"

…and substring()…

substring(x2b, first = 1) <- "heyho" # Replace first word via substr function x2b # "heyho this is a string" |

substring(x2b, first = 1) <- "heyho" # Replace first word via substr function x2b # "heyho this is a string"

…in order to replace *“hello”* with *“heyho”*.

**Note:** The replacement needs to have the same number of characters as the replaced part of your data. If you want to replace a substring with a string with different length, you might have a look at the gsub function.

However, let’s move on to the next example.

## Example 4: Extract Several Substrings

Another difference between substr and substring is the possibility to extract several substrings with one line of code. With substr, this is not possible. If we apply substr to several starting or stopping points, the function uses only the first entry (i.e. the stopping point 1):

substr(x1, start = 1, stop = 1:5) # Recycling via substr? # "h" |

substr(x1, start = 1, stop = 1:5) # Recycling via substr? # "h"

However, based on the substring R function, it is possible to use several first and last points:

substring(x1, first = 1, last = 1:5) # Recycling via substring! # "h" "he" "hel" "hell" "hello" |

substring(x1, first = 1, last = 1:5) # Recycling via substring! # "h" "he" "hel" "hell" "hello"

As you can see, the R substring function returns a vector that contains a substring for each last point that we have specified (i.e. 1, 2, 3, 4 & 5).

Easy peasy!

## Example 5: How to Find Substring Match?

In some situations you might want to know whether a character object contains a certain substring. On the basis of substr and substring, this is unfortunately not (or not easily) possible.

But don’t worry! R has many other functions that can be used for this task. Even though this tutorial is about substr and substring, you may want to know **how to check whether a substring exists within a string**.

For this task, we can use the grepl function. With the following R code, we can find the character pattern *“hello”* in our example vector *x1*:

grepl("hello", x1) # Find substring via grepl # TRUE |

grepl("hello", x1) # Find substring via grepl # TRUE

We got a match – our example vector *x1* contains the word *“hello”*.

What about *x2a*?

grepl("hello", x2a) # No substring match found # FALSE |

grepl("hello", x2a) # No substring match found # FALSE

You guessed it, grepl returns *FALSE*.

## Video: Further Examples for substr()

Sometimes it’s easier to understand something, when it is visualized in a video. If you need further explanations and examples on how to remove, find, or replace a substring in R, I can recommend the following video of Jonatan Lindh’s YouTube channel.

## Further Reading

- grep & grepl Functions in R
- sub & gsub R Functions
- The nchar Function in R
- The R Programming Language

### Subscribe to my free statistics newsletter:

### R Tutorials

abs Function in R

all & any R Functions

Set Aspect Ratio of Plot

attach & detach R Functions

attr, attributes & structure in R

cbind R Command

Change ggplot2 Legend Title

Character to Numeric in R

Check if Object is Defined

col & row sums, means & medians

Complete Cases in R

Concatenate Vector of Strings

Convert Date to Weekday

cumsum R Function

Data Frame Column to Numeric

diff Command in R

difftime R Function

dim Function in R

dir R Function

Disable Scientific Notation

Draw Segments in R

droplevels R Example

Evaluate an Expression

Extract Characters from String

Factor to Numeric in R

Format Decimal Places

get, get0 & mget in R

is.na R Function

is.null Function in R

jitter R Function

Join Data with dplyr Package

length Function in R

lowess R Smoothing Function

max and min Functions in R

NA Omit in R

nchar R Function

ncol Function in R

nrow Function in R

outer Function in R

pairs & ggpairs Plot

parse, deparse & R expression

paste & paste0 Functions in R

pmax and pmin R Functions

polygon Plots in R

pretty R Function

R Find Missing Values

R Functions List (+ Examples)

R NA – Values

R Replace NA with 0

rbind & rbind.fill in R

Read Excel Files in R

readLines, n.readLines & readline

Remove Element from List

Remove Legend in ggplot2

Rename Column Name in R

Replace Last Comma of String

rev R Command

Round Numeric Data in R

Save & Load RData Workspace

scan R Function

setdiff R Function

setNames vs. setnames in R

sink Command in R

Sort, Order & Rank Data in R

sprintf Function in R

Square Root in R

str_c Function of stringr Package

str_sub Function of stringr Package

strptime & strftime Functions

substr & substring R Commands

sweep R Function

Transform Data Frames

union Function in R

unlist in R

weekdays, months, quarters & julian in R

with & within R Functions

Write Excel File in R