73
6.1.2 Function grepl()
The function grepl() enables us to perform a similar task as grep(). The dierence resides
in that the output are not numeric indices, but logical (TRUE / FALSE). Hence you can think
of grepl() as grep-logical. Using the same text string of the previous examples, here’s the
behavior of grepl():
# some text
text = c("one word""a sentence""you and me""three two one")
# pattern
pat = "one"
# default usage
grepl(pat, text)
## [1] TRUE FALSE FALSE TRUE
Note that we get a logical vector of the same length as the character vector. Those elements
that matched the pattern have a value of TRUE; those that didn’t match the pattern have a
value of FALSE.
6.1.3 Function regexpr()
To nd exactly where the pattern is found in a given string, we can use the regexpr()
function. This function returns more detailed information than grep() providing us:
a) which elements of the text vector actually contain the regex pattern, and
b) identiesthe position ofthesubstringthat is matched by the regular expression pattern.
# some text
text = c("one word""a sentence""you and me""three two one")
# default usage
regexpr("one", text)
## [1] 1 -1 -1 11
## attr(,"match.length")
## [1] 3 -1 -1 3
## attr(,"useBytes")
## [1] TRUE
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
Converter pdf to powerpoint - Library software class: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
Converter pdf to powerpoint - Library software class: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
74
At rst glance the output from regexpr() may look a bit messy but it’s very simple to
interpret. What we have in the output are three displayed elements. The rst element is an
integer vector of the same length as text giving the starting positions of the rst match. In
this example the number 1 indicates that the pattern "one" starts at the position 1 of the
rst element in text. The negative index -1 means that there was no match; the number 11
indicates the position of the substring that was matched in the fourth element of text.
The attribute "match.length" gives us the length of the match in each element of text.
Again, a negative value of -1 means that there was no match in that element. Finally,
the attribute "useBytes" has a value of TRUE which means that the matching was done
byte-by-byte rather than character-by-character.
6.1.4 Function gregexpr()
The function gregexpr() does practically the same thing as regexpr(): identify where a
pattern is within a string vector, by searching each element separately. The only dierence
is that gregexpr() has an output in the form of a list. In other words, gregexpr() returns
alist of the same length as text, each element of which is of the same form as the return
value for regexpr(), except that the starting positions of every (disjoint) match are given.
# some text
text = c("one word""a sentence""you and me""three two one")
# pattern
pat = "one"
# default usage
gregexpr(pat, text)
## [[1]]
## [1] 1
## attr(,"match.length")
## [1] 3
## attr(,"useBytes")
## [1] TRUE
##
## [[2]]
## [1] -1
## attr(,"match.length")
## [1] -1
## attr(,"useBytes")
## [1] TRUE
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
Library software class:C#: How to Use SDK to Convert Document and Image Using XDoc.
You may use our converter SDK to easily convert PDF, Word, Excel, PowerPoint, Tiff, and Dicom files to raster images like Jpeg, Png, Bmp and Gif.
www.rasteredge.com
Library software class:C# PDF Convert: How to Convert MS PPT to Adobe PDF Document
Microsoft PowerPoint to PDF. |. Home ›› XDoc.Converter ›› C# Converter: PowerPoint to PDF. You maybe interested: PDF in C#,
www.rasteredge.com
75
##
## [[3]]
## [1] -1
## attr(,"match.length")
## [1] -1
## attr(,"useBytes")
## [1] TRUE
##
## [[4]]
## [1] 11
## attr(,"match.length")
## [1] 3
## attr(,"useBytes")
## [1] TRUE
6.1.5 Function regexec()
The function regexec() is very close to gregexpr() in the sense that the output is also a
list of the same length as text. Each element of the list contains the starting position of the
match. A value of -1 re ects that there is no match. In addition, each element of the list
has the attribute "match.length" giving the lengths of the matches (or -1 for no match):
# some text
text = c("one word""a sentence""you and me""three two one")
# pattern
pat = "one"
# default usage
regexec(pat, text)
## [[1]]
## [1] 1
## attr(,"match.length")
## [1] 3
##
## [[2]]
## [1] -1
## attr(,"match.length")
## [1] -1
##
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
Library software class:XDoc.Converter for .NET, Support Documents and Images Conversion
file converter SDK supports various commonly used document and image file formats, including Microsoft Office (2003 and 2007) Word, Excel, PowerPoint, PDF, Tiff
www.rasteredge.com
Library software class:Online Convert PowerPoint to PDF file. Best free online export
Online Powerpoint to PDF Converter. Download Free Trial. Convert a PPTX/PPT File to PDF. Just upload your file by clicking on the blue
www.rasteredge.com
76
## [[3]]
## [1] -1
## attr(,"match.length")
## [1] -1
##
## [[4]]
## [1] 11
## attr(,"match.length")
## [1] 3
Example from Spector
# handy function to extract matched term
x = regexpr(pat, text)
substring(text, x, , x x + attr(x, "match.length") - - 1)
## [1] "one" ""
""
"one"
# with NA
regexpr(pat, c(text, NA))
## [1] 1 -1 -1 11 NA
## attr(,"match.length")
## [1] 3 -1 -1 3 NA
6.2 Pattern Replacement Functions
Sometimes nding a pattern in a given string vector is all we want. However, there are
occasions in which we might also be interested in replacing one pattern with another one.
For this purpose we can use the substitution functions sub() and gsub(). The dierence
between sub() and gsub() is that the former replaces only the rst occurrence of a pattern
whereas the latter replaces all occurrences.
The replacement functions require three main arguments: a regex pattern to be matched,
areplacement for the matched pattern, and the text where matches are sought. The basic
usage is:
sub(pattern, replacement, text)
gsub(pattern, replacement, text)
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
Library software class:RasterEdge XDoc.PowerPoint for .NET - SDK for PowerPoint Document
Able to view and edit PowerPoint rapidly. Convert. Convert PowerPoint to PDF. Convert PowerPoint to HTML5. Convert PowerPoint to Tiff. Convert PowerPoint to Jpeg
www.rasteredge.com
Library software class:C# WinForms Viewer: Load, View, Convert, Annotate and Edit
View PDF in WPF; C#.NET: View Word in WPF; C#.NET: View Excel in WPF; C#.NET: View PowerPoint in WPF; C#.NET: View Tiff in WPF. XDoc.Converter for C#; XDoc.PDF
www.rasteredge.com
77
6.2.1 Replacing rst occurrence with sub()
The function sub() replaces the rst occurrence of a pattern in a given text. This means
that if there is more than one occurrence of the pattern in each element of a string vector,
only the rst one will be replaced. For example, suppose we have the following text vector
containing various strings:
Rstring = c("The R Foundation",
"for Statistical Computing",
"R is FREE software",
"R is a collaborative project")
Imagine that our aim is to replace the pattern "R" with a new pattern "RR". If we use sub()
this is what we obtain:
# string
Rstring = c("The R R Foundation",
"for Statistical Computing",
"R is FREE software",
"R is a collaborative project")
# substitute  R  with  RR
sub("R""RR", Rstring)
## [1] "The RR Foundation"
"for Statistical Computing"
## [3] "RR is FREE software"
"RR is a collaborative project"
As you can tell, only the rst occurrence of the letter R is replaced in each element of the
text vector. Note that the word FREE in the third element also contains an R but it was not
replaced. This is because it was not the rst occurrence of the pattern.
6.2.2 Replacing all occurrences with gsub()
To replace not only the rst pattern occurrence, but all of the occurrences we should use
gsub() (think of it as general substition). If we take the same vector Rstring and patterns
of the last example, this is what we obtain when we apply gsub()
# string
Rstring = c("The R R Foundation",
"for Statistical Computing",
"R is FREE software",
"R is a collaborative project")
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
Library software class:C# powerpoint - Convert PowerPoint to PDF in C#.NET
RasterEdge Visual C# .NET PowerPoint to PDF converter library control (XDoc.PowerPoint) is a mature and effective PowerPoint document converting utility.
www.rasteredge.com
Library software class:VB.NET PDF Converter Library SDK to convert PDF to other file
editing if they integrate this VB.NET PDF converter control with for converting MicroSoft Office Word, Excel and PowerPoint document to PDF file in VB
www.rasteredge.com
78
# substitute
gsub("R""RR", Rstring)
## [1] "The RR Foundation"
"for Statistical Computing"
## [3] "RR is FRREE software"
"RR is a collaborative project"
The obtained output is almost the same as with sub(), except for the third element in
Rstring. Now the occurence of R in the word FREE is taken into account and gsub() changes
it to FRREE.
6.3 Splitting Character Vectors
Besides the operations of nding patterns and replacing patterns, another common task is
splitting a string based on a pattern. To do this R comes with the function strsplit()
which is designed to split the elements of a character vector into substrings according to
regex matches.
If you check the help documentation |help(strsplit)| you will see that the basic usage
of strsplit() requires two main arguments:
strsplit(x, split)
xis the character vector and split is the regular expression pattern. However, in order to
keep the same notation that we’ve been using with the other grep() functions, it is better
if we think of x as text, and split as pattern. In this way we can express the usage of
strsplit() as:
strsplit(text, pattern)
One of the typical tasks in which we can use strsplit() is when we want to break a string
into individual components (i.e. words). For instance, if we wish to separate each word
within a given sentence, we can do that specifying a blank space " " as splitting pattern:
# a sentence
sentence = c("R is s a a collaborative e project t with many contributors")
# split into words
strsplit(sentence, " ")
## [[1]]
## [1] "R"
"is"
"a"
"collaborative"
## [5] "project"
"with"
"many"
"contributors"
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
79
Another basic example may consist in breaking apart the portions of a telephone number by
splitting those sets of digits joined by a dash "-"
# telephone numbers
tels = c("510-548-2238""707-231-2440""650-752-1300")
# split each number into its portions
strsplit(tels, "-")
## [[1]]
## [1] "510" "548" "2238"
##
## [[2]]
## [1] "707" "231" "2440"
##
## [[3]]
## [1] "650" "752" "1300"
6.4 Functions in stringr
In the previous chapter we brie y presented the functions of the R package stringr for
regular expressions. As we mentioned, all the stringr functions share a common usage
structure:
str_function(string, pattern)
The main two arguments are: a string vector to be processed , and a single pattern (i.e.
regular expression) to match. Moreover, all the function names begin with the prex str
,
followed by the name of the action to be performed. For example, to locate the position of
the rst occurence, we should use str
locate(); to locate the positions of all matches we
should use str
locate
all().
6.4.1 Detecting patterns with str
detect()
For detecting whether a pattern is present (or absent) in a string vector, we can use the
function str
detect(). Actually, this function is a wraper of grepl():
# some objects
some_objs = c("pen""pencil""marker""spray")
# detect phones
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
80
str_detect(some_objs, "pen")
## [1] TRUE TRUE FALSE FALSE
# select detected macthes
some_objs[str_detect(some_objs, "pen")]
## [1] "pen"
"pencil"
As you can see, the output of str
detect() is a boolean vector (TRUE/FALSE) of the same
length as the specied string. You get a TRUE if a match is detected in a string, FALSE
otherwise. Here’s another more elaborated example in which the pattern matches dates of
the form day-month-year:
# some strings
strings = c("12 Jun n 2002"" 8 8 September r 2004 ""22-July-2009 ",
"01 01 2001", "date", "02.06.2000",
"xxx-yyy-zzzz", "$2,600")
# date pattern (month as text)
dates = "([0-9]f1,2g)[- .]([a-zA-Z]+)[- - .]([0-9]f4g)"
# detect dates
str_detect(strings, dates)
## [1] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
6.4.2 Extract rst match with str
extract()
For extracting a string containing a pattern, we can use the function str
extract(). In
fact, this function extracts the rst piece of a string that matches a given pattern. For
example, imagine that we have a character vector with some tweets about Paris, and that
we want to extract the hashtags. We can do this simply by dening a #hashtag pattern like
#[a-zA-Z]f1g
# tweets about  Paris
paris_tweets = c(
"#Paris is chock-full of cultural and culinary attractions",
"Some time in #Paris along Canal St.-Martin famous by #Amelie",
"While you re in #Paris, stop at cafe: http://goo.gl/yaCbW",
"Paris, the city of light")
# hashtag pattern
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
81
hash = "#[a-zA-Z]f1,g"
# extract (first) hashtag
str_extract(paris_tweets, hash)
## [1] "#Paris" "#Paris" "#Paris" NA
As you can see, the output of str
extract() is a vector of same length as string. Those
elements that don’t match the pattern are indicated as NA. Note that str
extract() only
matches the rst pattern: it didn’t extract the hashtag "#Amelie".
6.4.3 Extract all matches with str
extract
all()
In addition to str
extract(), stringr also provides the function str
extract
all(). As
its name indicates, we use str
extract
all() to extract all patterns in a vector string.
Taking the same string as in the previous example, we can extract all the hashtag matches
like so:
# extract (all) hashtags
str_extract_all(paris_tweets, "#[a-zA-Z]f1,g")
## [[1]]
## [1] "#Paris"
##
## [[2]]
## [1] "#Paris" "#Amelie"
##
## [[3]]
## [1] "#Paris"
##
## [[4]]
## character(0)
Compared to str
extract(), the output of str
extract
all() is a list of same length as
string. In addition, those elements that don’t match the pattern are indicated with an
empty character vector character(0) instead of NA.
6.4.4 Extract rst match group with str
match()
Closely related to str
extract() the package stringr oers another extracting function:
str
match(). This function not only extracts the matched pattern but it also shows each of
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
82
the matched groups in a regex character class pattern.
# string vector
strings = c("12 Jun n 2002"" 8 8 September r 2004 ""22-July-2009 ",
"01 01 2001", "date", "02.06.2000",
"xxx-yyy-zzzz", "$2,600")
# date pattern (month as text)
dates = "([0-9]f1,2g)[- .]([a-zA-Z]+)[- - .]([0-9]f4g)"
# extract first matched group
str_match(strings, dates)
##
[,1]
[,2] [,3]
[,4]
## [1,] "12 Jun 2002"
"12" "Jun"
"2002"
## [2,] "8 September 2004" "8" "September" "2004"
## [3,] "22-July-2009"
"22" "July"
"2009"
## [4,] NA
NA
NA
NA
## [5,] NA
NA
NA
NA
## [6,] NA
NA
NA
NA
## [7,] NA
NA
NA
NA
## [8,] NA
NA
NA
NA
Note that the output is not a vector but a character matrix. The rst column is the complete
match, the other columns are each of the captured groups. For those unmatched elements,
there is a missing value NA.
6.4.5 Extract all matched groups with str
match
all()
If what we’re looking for is extracting all patterns in a string vector, instead of using
str
extract() we should use str
extract
all():
# tweets about  Paris
paris_tweets = c(
"#Paris is chock-full of cultural and culinary attractions",
"Some time in #Paris along Canal St.-Martin famous by #Amelie",
"While you re in #Paris, stop at cafe: http://goo.gl/yaCbW",
"Paris, the city of light")
# match (all) hashtags in  paris_tweets
str_match_all(paris_tweets, "#[a-zA-Z]f1,g")
## [[1]]
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
Documents you may be interested
Documents you may be interested