3
CRAN Task View on Natural Language Processing (NLP):
http://cran.r-project.org/web/views/NaturalLanguageProcessing.html
However, even if you don’t plan to do text analysis, text mining, or natural language pro-
cessing, I bet you have some dataset that contains data as characters: names of rows, names
of columns, dates, monetary quantities, longitude and latitude, etc. I’m sure that you have
encountered one or more of the following cases:
 You want to remove a given character in the names of your variables
 You want to replace a given character in your data
 Maybe you wanted to convert labels to upper case (or lower case)
 You’ve been struggling with xml (or html) les
 You’ve been modifying text les in excel changing labels, categories, one cell at a time,
or doing one thousand copy-paste operations
Hopefully after reading this book, you will have thenecessary tools in your toolbox for dealing
with these (and many) other situations that involve handling and processing strings in R.
1.3 A Toy Example
To give you an idea of some of the things we can do in R with string processing, let’s play a
bit with a simple example. We’ll use the data frame USArrests that already comes with R
for this crash informal introduction. Use the function head() to get a peek of the data:
# take a peek of USArrests
head(USArrests)
##
Murder Assault UrbanPop Rape
## Alabama
13.2
236
58 21.2
## Alaska
10.0
263
48 44.5
## Arizona
8.1
294
80 31.0
## Arkansas
8.8
190
50 19.5
## California
9.0
276
91 40.6
## Colorado
7.9
204
78 38.7
The labels on the rows such as Alabama or Alaska are displayed strings. Likewise, the labels
of the columns |Murder, Assault, UrbanPop and Rape| are also strings.
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
Export pdf to powerpoint - control Library platform:C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF in C#.net, ASP.NET MVC, WinForms, WPF
Online C# Tutorial for Creating PDF from Microsoft PowerPoint Presentation
www.rasteredge.com
Export pdf to powerpoint - control Library platform:VB.NET Create PDF from PowerPoint Library to convert pptx, ppt to PDF in vb.net, ASP.NET MVC, WinForms, WPF
VB.NET Tutorial for Export PDF file from Microsoft Office PowerPoint
www.rasteredge.com
4
Abbreviating strings
Suppose we want to abbreviate the names of the States. Furthermore, suppose we want to
abbreviate the names using the rst four characters of each name. One way to do that is by
using the function substr() which substrings a character vector. We just need to indicate
the start=1 and stop=4 positions:
# names of states
states = rownames(USArrests)
# substr
substr(x = = states, , start = = 1, , stop = = 4)
## [1] "Alab" "Alas" "Ariz" "Arka" "Cali" "Colo" "Conn" "Dela" "Flor" "Geor"
## [11] "Hawa" "Idah" "Illi" "Indi" "Iowa" "Kans" "Kent" "Loui" "Main" "Mary"
## [21] "Mass" "Mich" "Minn" "Miss" "Miss" "Mont" "Nebr" "Neva" "New " "New "
## [31] "New " "New " "Nort" "Nort" "Ohio" "Okla" "Oreg" "Penn" "Rhod" "Sout"
## [41] "Sout" "Tenn" "Texa" "Utah" "Verm" "Virg" "Wash" "West" "Wisc" "Wyom"
This may not be the best solution. Note that there are four states with the same abbreviation
"New " (New Hampshire, New Jersey, New Mexico, New York). Likewise, North Carolina
and North Dakota share the same name "Nort". In turn, South Carolina and South Dakota
got the same abbreviation "Sout".
Abetter way to abbreviate the names of the states can be performed by using the function
abbreviate() like so:
# abbreviate state names
states2 = abbreviate(states)
# remove vector names (for convenience)
names(states2) = = NULL
states2
## [1] "Albm" "Alsk" "Arzn" "Arkn" "Clfr" "Clrd" "Cnnc" "Dlwr" "Flrd" "Gerg"
## [11] "Hawa" "Idah" "Illn" "Indn" "Iowa" "Knss" "Kntc" "Losn" "Main" "Mryl"
## [21] "Mssc" "Mchg" "Mnns" "Msss" "Mssr" "Mntn" "Nbrs" "Nevd" "NwHm" "NwJr"
## [31] "NwMx" "NwYr" "NrtC" "NrtD" "Ohio" "Oklh" "Orgn" "Pnns" "RhdI" "SthC"
## [41] "SthD" "Tnns" "Texs" "Utah" "Vrmn" "Vrgn" "Wshn" "WstV" "Wscn" "Wymn"
If we decide to try an abbreviation with six letters we just simply change the argument
min.ength = 5
# abbreviate state names with 5 letters
abbreviate(states, minlength = 5)
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
control Library platform:Online Convert PowerPoint to PDF file. Best free online export
Online Powerpoint to PDF Converter. Download Free Trial. Then just wait until the conversion from Powerpoint to PDF is complete and download the file.
www.rasteredge.com
control Library platform:C# WPF PDF Viewer SDK to convert and export PDF document to other
Viewer & Editor. WPF: View PDF. WPF: Annotate PDF. WPF: Export PDF. WPF: Print PDF. PDF Create. Create PDF from Word. Create PDF from Excel. Create PDF from PowerPoint
www.rasteredge.com
5
##
Alabama
Alaska
Arizona
Arkansas
California
##
"Alabm"
"Alask"
"Arizn"
"Arkns"
"Clfrn"
##
Colorado
Connecticut
Delaware
Florida
Georgia
##
"Colrd"
"Cnnct"
"Delwr"
"Flord"
"Georg"
##
Hawaii
Idaho
Illinois
Indiana
Iowa
##
"Hawai"
"Idaho"
"Illns"
"Indin"
"Iowa"
##
Kansas
Kentucky
Louisiana
Maine
Maryland
##
"Kanss"
"Kntck"
"Lousn"
"Maine"
"Mryln"
## Massachusetts
Michigan
Minnesota
Mississippi
Missouri
##
"Mssch"
"Mchgn"
"Mnnst"
"Mssss"
"Missr"
##
Montana
Nebraska
Nevada New Hampshire
New Jersey
##
"Montn"
"Nbrsk"
"Nevad"
"NwHmp"
"NwJrs"
##
New Mexico
New York North Carolina
North Dakota
Ohio
##
"NwMxc"
"NwYrk"
"NrthC"
"NrthD"
"Ohio"
##
Oklahoma
Oregon
Pennsylvania
Rhode Island South Carolina
##
"Oklhm"
"Oregn"
"Pnnsy"
"RhdIs"
"SthCr"
##
South Dakota
Tennessee
Texas
Utah
Vermont
##
"SthDk"
"Tnnss"
"Texas"
"Utah"
"Vrmnt"
##
Virginia
Washington West Virginia
Wisconsin
Wyoming
##
"Virgn"
"Wshng"
"WstVr"
"Wscns"
"Wymng"
Getting the longest name
Now let’s imagine that we need to nd the longest name. This implies that we need to count
the number of letters in each name. The function nchar() comes handy for that purpose.
Here’s how we could do it:
# size (in characters) of each name
state_chars = nchar(states)
# longest name
states[which(state_chars == max(state_chars))]
## [1] "North Carolina" "South Carolina"
Selecting States
To make things more interesting, let’s assume that we wish to select those states containing
the letter "k". How can we do that? Very simple, we just need to use the function grep()
for working with regular expressions. Simply indicate the pattern = "k" as follows:
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
control Library platform:VB.NET PDF - Convert PDF with VB.NET WPF PDF Viewer
PDF in WPF. Annotate PDF in WPF. Export PDF in WPF. Print PDF in WPF. PDF Create. Create PDF from Word. Create PDF from Excel. Create PDF from PowerPoint. Create
www.rasteredge.com
control Library platform:VB.NET PDF Converter Library SDK to convert PDF to other file
PDF Export. |. Home ›› XDoc.PDF ›› VB.NET PDF: PDF Export. for converting MicroSoft Office Word, Excel and PowerPoint document to PDF file in VB
www.rasteredge.com
6
# get states names with  k
grep(pattern = "k", x x = = states, , value = = TRUE)
## [1] "Alaska"
"Arkansas"
"Kentucky"
"Nebraska"
## [5] "New York"
"North Dakota" "Oklahoma"
"South Dakota"
Instead of grabbing those names containing "k", say we wish to select those states containing
the letter "w". Again, this can be done with grep():
# get states names with  w
grep(pattern = "w", x x = = states, , value = = TRUE)
## [1] "Delaware"
"Hawaii"
"Iowa"
"New Hampshire"
## [5] "New Jersey"
"New Mexico"
"New York"
Notice that we only selected those states with lowercase "w". But what about those states
with uppercase "W"? There are several options to nd a solution for this question. One
option is to specify the searched pattern as a character class "[wW]":
# get states names with  w  or  W
grep(pattern = "[wW]", x = = states, , value = = TRUE)
## [1] "Delaware"
"Hawaii"
"Iowa"
"New Hampshire"
## [5] "New Jersey"
"New Mexico"
"New York"
"Washington"
## [9] "West Virginia" "Wisconsin"
"Wyoming"
Another solution is to rst convert the state names to lower case, and then look for the
character "w", like so:
# get states names with  w
grep(pattern = "w", x x = tolower(states), value e = = TRUE)
## [1] "delaware"
"hawaii"
"iowa"
"new hampshire"
## [5] "new jersey"
"new mexico"
"new york"
"washington"
## [9] "west virginia" "wisconsin"
"wyoming"
Alternatively, instead of converting the state names to lower case we could do the opposite
(convert to upper case), and then look for the character "W", like so:
# get states names with  W
grep(pattern = "W", x x = toupper(states), value e = = TRUE)
## [1] "DELAWARE"
"HAWAII"
"IOWA"
"NEW HAMPSHIRE"
## [5] "NEW JERSEY"
"NEW MEXICO"
"NEW YORK"
"WASHINGTON"
## [9] "WEST VIRGINIA" "WISCONSIN"
"WYOMING"
Athird solution, and perhaps the simplest one, is to specify the argument ignore.case=TRUE
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
control Library platform:C# PDF Converter Library SDK to convert PDF to other file formats
PDF Export. |. Home ›› XDoc.PDF ›› C# PDF: PDF Export. Able to export PDF document to HTML file. Able to create convert PDF to SVG file.
www.rasteredge.com
control Library platform:C# HTML5 PDF Viewer SDK to convert and export PDF document to
Export PDF in WPF. Print PDF in WPF. PDF Create. Create PDF from Word. Create PDF from Excel. Create PDF from PowerPoint. Create PDF from Tiff. Create PDF from
www.rasteredge.com
7
inside grep():
# get states names with  w
grep(pattern = "w", x x = = states, , value = = TRUE, ignore.case e = = TRUE)
## [1] "Delaware"
"Hawaii"
"Iowa"
"New Hampshire"
## [5] "New Jersey"
"New Mexico"
"New York"
"Washington"
## [9] "West Virginia" "Wisconsin"
"Wyoming"
Some computations
Besides manipulating strings and performing pattern matching operations, we can also do
some computations. For instance, we could ask for the distribution of the State names’
length. To nd the answer we can use nchar(). Furthermore, we can plot a histogram of
such distribution:
# histogram
hist(nchar(states), main = "Histogram",
xlab = "number of characters in n US S State names")
Histogram
number of characters in US State names
Frequency
4
6
8
10
12
14
0
5
10
15
20
Let’s ask a more interesting question. What is the distribution of the vowels in the names
of the States? For instance, let’s start with the number of a’s in each name. There’s a very
useful function for this purpose: regexpr(). We can use regexpr() to get the number of
times that a searched pattern is found in a character vector. When there is no match, we get
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
control Library platform:C# WPF PDF Viewer SDK to view, annotate, convert and print PDF in
Export PDF in WPF. Print PDF in WPF. PDF Create. Create PDF from Word. Create PDF from Excel. Create PDF from PowerPoint. Create PDF from Tiff. Create PDF from
www.rasteredge.com
control Library platform:VB.NET PDF- HTML5 PDF Viewer for VB.NET Project
PDF in WPF. Annotate PDF in WPF. Export PDF in WPF. Print PDF in WPF. PDF Create. Create PDF from Word. Create PDF from Excel. Create PDF from PowerPoint. Create
www.rasteredge.com
8
avalue -1.
# position of a s
positions_a = gregexpr(pattern = "a", text = states, ignore.case = TRUE)
# how many a s?
num_a = sapply(positions_a, function(x) ifelse(x[1] > 0, length(x), 0))
num_a
## [1] 4 3 2 3 2 1 0 2 1 1 2 1 0 2 1 2 0 2 1 2 2 1 1 0 0 2 2 2 1 0 0 0 2 2 0
## [36] 2 0 2 1 2 2 0 1 1 0 1 1 1 0 0
If you inspect positions
ayou’ll see that it contains some negative numbers -1. This means
there are no letters a in that name. To get the number of occurrences of a’s we are taking
a shortcut with sapply(). The same operation can be performed by using the function
str
count() from the package "stringr".
# load stringr (remember to install it first)
library(stringr)
# total number of a s
str_count(states, "a")
## [1] 3 2 1 2 2 1 0 2 1 1 2 1 0 2 1 2 0 2 1 2 2 1 1 0 0 2 2 2 1 0 0 0 2 2 0
## [36] 2 0 2 1 2 2 0 1 1 0 1 1 1 0 0
Notice that we are only getting the number of a’s in lower case. Since str
count() does not
contain the argument ignore.case, we need to transform all letters to lower case, and then
count the number of a’s like this:
# total number of a s
str_count(tolower(states), "a")
## [1] 4 3 2 3 2 1 0 2 1 1 2 1 0 2 1 2 0 2 1 2 2 1 1 0 0 2 2 2 1 0 0 0 2 2 0
## [36] 2 0 2 1 2 2 0 1 1 0 1 1 1 0 0
Once we know how to do it for one vowel, we can do the same for all the vowels:
# vector of vowels
vowels = c("a""e""i""o""u")
# vector for storing results
num_vowels = vector(mode = "integer", length = 5)
# calculate number of vowels in each name
for (j in seq_along(vowels)) f
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
9
num_aux = str_count(tolower(states), vowels[j])
num_vowels[j] = sum(num_aux)
g
# add vowel names
names(num_vowels) = vowels
# total number of vowels
num_vowels
## a e i o u
## 61 28 44 36 8
# sort them in decreasing order
sort(num_vowels, decreasing g = TRUE)
## a i o e u
## 61 44 36 28 8
And nally, we can visualize the distribution with a barplot:
# barplot
barplot(num_vowels, main = "Number of f vowels s in n USA States s names",
border = NA, ylim = c(0, 80))
a
e
i
o
u
Number of vowels in USA States names
0
20
40
60
80
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
10
1.4 Overview
The previous examples with the names of USA States are just an appetizer of the menu
contained in this book. The rest of this book is divided in six more chapters:
Chapter 2: Character Strings in R
Chapter 3: String Manipulations
Chapter 4: String manipulations with stringr
Chapter 5: Regular Expressions (part I)
Chapter 6: Regular Expressions (part II)
Chapter 7: Practical Applications
Chapter 2 is dedicated to show you the basics in R for working with character strings. We
see how to get text data in R and how R objects behave when dealing with characters.
Chapter 3 describes a wide range of functions that can be used to manipulate strings without
requiringregular expressions. Theidea is to coverthose functions within the basedistribution
of R.
Chapter 4 is intended to show you the string manipulation functions of the R package
stringr. Similar to chapter 3, the content of chapter 4 is limited to those functions for
working without regular expressions.
Chapter 5 is the rst part of the discussion on regular expressions in R. Basically, the purpose
of this chapter is to talk about the way R works with regular expressions (as compared to
other scripting languages).
Chapter 6 continues the discussion around regular expressions. It covers the application of
the regex functions in the base package as well as in the stringr package.
Chapter 7 is the last chapter in which we discuss some examples with practical applications.
We get to apply part of the material covered in the book with simple exercises that are
intended to motivate you in the potential of R for processing character strings.
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
Chapter 2
Character Strings in R
The main type of data R gives us to process text strings is character. Formally, the class of
object that holds character strings in R is "character". We express character strings using
single or double quotes:
a character string using single quotes
"a character string using double quotes"
We can insert single quotes in a string with double quotes, and vice versa:
"The  R  project for statistical computing"
The "R" project for statistical computing
We cannot insert single quotes in a string with single quotes, neither we can insert double
quotes in a string with double quotes (Don’t do this!):
"This "is" totally unacceptable"
This  is  absolutely wrong
2.1 Creating Character Strings
Besides the single quotes   or double quotes "", R provides the function character() to
create character strings. More specically, character() is the function that creates vector
objects of type "character".
11
12
2.1.1 Empty string
Let’s start with the most basic string: the empty string produced by consecutive quotation
marks: "". Technically, "" is a string with no characters in it, hence the name empty string:
# empty string
empty_str = ""
# display
empty_str
## [1] ""
# class
class(empty_str)
## [1] "character"
2.1.2 Empty character vector
Another basic string structure is the empty character vector produced by the function
character() and its argument length=0:
# empty character vector
empty_chr = character(0)
# display
empty_chr
## character(0)
# class
class(empty_chr)
## [1] "character"
It is important not to confuse the empty character vector character(0) with the empty
string ""; one of the main dierences between them is that they have dierent lengths:
# length of empty string
length(empty_str)
## [1] 1
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
Documents you may be interested
Documents you may be interested