13
# length of empty character vector
length(empty_chr)
## [1] 0
Notice that the empty string empty
str has length 1, while the empty character vector
empty
chr has length 0.
2.1.3 character()
As we already mentioned, character() is a function to create character vectors. We just
have to specify the length of the vector, and character() will produce a character vector
with as many empty strings, for instance:
# character vector with 5 empty strings
char_vector = character(5)
# display
char_vector
## [1] "" "" "" "" ""
Once an empty character object has been created, new components may be added toitsimply
by giving it an index value outside its previous range.
# another example
example = character(0)
example
## character(0)
# check its length
length(example)
## [1] 0
# add first element
example[1] = "first"
example
## [1] "first"
# check its length again
length(example)
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
Image from pdf to ppt - Library control 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
Image from pdf to ppt - Library control 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
14
## [1] 1
We can add more elements without the need to follow a consecutive index range:
example[4] = "fourth"
example
## [1] "first" NA
NA
"fourth"
length(example)
## [1] 4
Notice that we went from a one-element vector to a four-element vector without specifying
the second and third elements. R lls this gap with missing values NA.
2.1.4 is.character() and as.character()
Related to character() wehave its twosister functions: as.character()and is.character().
Thesetwo functionsaregeneric methos for creating and testingfor objects of type"character".
To test if an object is of type "character" you use the function is.character():
# define two objects  a  and  b
a = "test me"
b = 8 + 9
# are  a  and  b  characters?
is.character(a)
## [1] TRUE
is.character(b)
## [1] FALSE
Likewise, you can also use the function class() to get the class of an object:
# classes of  a  and  b
class(a)
## [1] "character"
class(b)
## [1] "numeric"
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
Library control class:C# PDF Convert: How to Convert MS PPT to Adobe PDF Document
PowerPoint to Image. Adobe PDF to Image. Tiff to Image. Dicom to Image. Microsoft PowerPoint to PDF. C# PDF Convert: How to Convert MS PPT to Adobe PDF Document.
www.rasteredge.com
Library control class:How to C#: Convert Word, Excel and PPT to PDF
in WPF, C#.NET PDF Create, C#.NET PDF Document Viewer, C#.NET PDF Windows Viewer, C#.NET convert image to PDF How to C#: Convert Word, Excel and PPT to PDF.
www.rasteredge.com
15
For better or worse, R allows you to convert non-character objects into character strings with
the function as.character():
# converting  b  as character
b = as.character(b)
b
## [1] "17"
2.2 Strings and R objects
Before continuing our discussion on functions for manipulating strings, we need to talk about
some important technicalities. R has ve main types ofobjects to storedata: vector, factor,
matrix (and array), data.frame, and list. We can use each of those objects to store
character strings. However, these objects will behave dierently depending on whether we
store character data with other types of data. Let’s see how R treats objects with dierent
types of data (e.g. character, numeric, logical).
2.2.1 Behavior of R objects with character strings
Vectors The main, and most basic, type of objects in R are vectors. Vectors must have
their values all of the same mode. This means that any given vector must be unambiguously
either logical, numeric, complex, character or raw. So what happens when we mix dierent
types of data in a vector?
# vector with numbers and characters
c(1:5, pi, "text")
## [1] "1"
"2"
"3"
## [4] "4"
"5"
"3.14159265358979"
## [7] "text"
As you can tell, the resulting vector from combining integers (1:5), the number pi, and some
"text" is a vector with all its elements treated as character strings. In other words, when
we combine mixed data in vectors, strings will dominate. This means that the mode of the
vector will be "character", even if we mix logical values:
# vector with numbers, logicals, and characters
c(1:5, TRUE, , pi, "text", FALSE)
## [1] "1"
"2"
"3"
## [4] "4"
"5"
"TRUE"
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
Library control class:How to C#: Convert PDF, Excel, PPT to Word
Text Search. Insert Image. Thumbnail Create. Convert PDF to Word. |. Home ›› XDoc.Word ›› C# Word: Convert How to C#: Convert PDF, Excel, PPT to Word.
www.rasteredge.com
Library control class:C# TIFF: Learn to Convert MS Word, Excel, and PPT to TIFF Image
C# TIFF - Conversion from Word, Excel, PPT to TIFF. Learn How to Change MS Word, Excel, and PowerPoint to TIFF Image File in C#. Overview
www.rasteredge.com
16
## [7] "3.14159265358979" "text"
"FALSE"
Matrices The same behavior of vectors happens when we mix characters and numbers in
matrices. Again, everything will be treated as characters:
# matrix with numbers and characters
rbind(1:5, letters[1:5])
##
[,1] [,2] [,3] [,4] [,5]
## [1,] "1" "2" "3" "4" "5"
## [2,] "a" "b" "c" "d" "e"
Data frames With data frames, things are a bit dierent. By default, character strings
inside a data frame will be converted to factors:
# data frame with numbers and characters
df1 = data.frame(numbers = 1:5, letters = letters[1:5])
df1
##
numbers letters
## 1
1
a
## 2
2
b
## 3
3
c
## 4
4
d
## 5
5
e
# examine the data frame structure
str(df1)
##  data.frame : 5 obs. of 2 variables:
## $ numbers: int 1 2 3 4 5
## $ letters: Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5
To turn-o the data.frame()’s default behavior of converting strings into factors, use the
argument stringsAsFactors = FALSE:
# data frame with numbers and characters
df2 = data.frame(numbers = 1:5, letters = letters[1:5],
stringsAsFactors = FALSE)
df2
##
numbers letters
## 1
1
a
## 2
2
b
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
Library control class:VB.NET PowerPoint: Process & Manipulate PPT (.pptx) Slide(s)
VB.NET PowerPoint processing control add-on can do PPT creating, loading provide powerful & profession imaging controls, PDF document, image to pdf files and
www.rasteredge.com
Library control class:VB.NET PowerPoint: Read & Scan Barcode Image from PPT Slide
VB.NET PPT PDF-417 barcode scanning SDK to detect PDF-417 barcode image from PowerPoint slide. VB.NET APIs to detect and decode
www.rasteredge.com
17
## 3
3
c
## 4
4
d
## 5
5
e
# examine the data frame structure
str(df2)
##  data.frame : 5 obs. of 2 variables:
## $ numbers: int 1 2 3 4 5
## $ letters: chr "a" "b" "c" "d" ...
Even though df1 and df2 are identically displayed, their structure is dierent. While
df1$letters is stored as a "factor", df2$letters is stored as a "character".
Lists With lists, we can combine whatever type of data we want. The type of data in each
element of the list will maintain its corresponding mode:
# list with elements of different mode
list(1:5, letters[1:5], rnorm(5))
## [[1]]
## [1] 1 2 3 4 5
##
## [[2]]
## [1] "a" "b" "c" "d" "e"
##
## [[3]]
## [1] -0.6958 -2.2614 -1.4495 1.5161 1.3733
2.3 Getting Text into R
We’ve seen how to express character strings using single quotes   or double quotes "". But
we also need to discuss how to get text into R, that is, how to import and read les that
contain character strings. So, how do we get text into R? Well, it basically depends on the
type-format of the les we want to read.
We willdescribetwogeneral situations. One in which the contentofthe lecan be represented
in tabular format (i.e. rows and columns). The other one when the content does not have a
tabular structure. In this second case, we have characters that are in an unstructured form
(i.e. just lines of strings) or at least in a non-tabular format such as html, xml, or other
markup language format.
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
Library control class:VB.NET PowerPoint: Convert & Render PPT into PDF Document
slide(s) into image source. If you want to create a featured PPTX to PDF converting application, you may need other VB.NET APIs to customize PPT (.pptx) to
www.rasteredge.com
Library control class:VB.NET PowerPoint: VB Codes to Create Linear and 2D Barcodes on
The created Interleaved 2 of 5 barcode image on PPT PowerPoint PDF 417 barcode library is a mature and This PPT ISBN barcode creator offers users the flexible
www.rasteredge.com
18
Another function is scan() which allows us to read data in several formats. Usually we use
scan() to parse R scripts, but we can also use to import text (characters)
2.3.1 Reading tables
If the data we want to import is in some tabular format we can use the set of functions to
read tables like read.table() and its sister functions |e.g. read.csv(), read.delim(),
read.fwf()|. These functions read a le in table format and create a data frame from it,
with rows corresponding to cases, and columns corresponding to elds in the le.
Functions to read les in tabular format
Function
Description
read.table()
main function to read le in table format
read.csv()
reads csv les separated by a comma ","
read.csv2()
reads csv les separated by a semicolon ";"
read.delim()
reads les separated by tabs "nt"
read.delim2() similar to read.delim()
read.fwf()
read xed width format les
Let’s see a simple example reading a le from the Australian radio broadcaster ABC (http:
//www.abc.net.au/radio/). Inparticular, , we’ll read a csv v le that contains data from
ABC’s radio stations. Such le is located at:
http://www.abc.net.au/local/data/public/stations/abc-local-radio.csv
To import the le abc-local-radio.csv, we can use either read.table() or read.csv()
(just choose the right parameters). Here’s the code to read the le with read.table():
# abc radio stations data URL
abc = "http://www.abc.net.au/local/data/public/stations/abc-local-radio.csv"
# read data from URL
radio = read.table(abc, header = TRUE, sep = ",", stringsAsFactors = FALSE)
In this case, the location of the le is dened in the object abc which is the rst argument
passed to read.table(). Then we choose other arguments such as header = TRUE, sep =
",", and stringsAsFactors = FALSE. The argument header = TRUE indicates that therst
row of the le contains the names of the columns. The separator (a comma) is specifcied by
sep = ",". And nally, to keep the character strings in the le as "character" in the data
frame, we use stringsAsFactors = FALSE.
If everything went ne during the le reading operation, the next thing to do is to chek the
size of the created data frame using dim():
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
19
# size of table in  radio
dim(radio)
## [1] 53 18
Notice that the data frame radio is a table with 53 rows and 18 columns. If we examine ths
structure with str() we will get information of each column. The argument vec.len = 1
indicates that we just want the rst element of each variable to be displayed:
# structure of columns
str(radio, vec.len n = = 1)
##  data.frame : 53 obs. of 18 variables:
## $ State
: chr "QLD" ...
## $ Website.URL
: chr "http://www.abc.net.au/brisbane/" ...
## $ Station
: chr "612 ABC Brisbane" ...
## $ Town
: chr " Brisbane " ...
## $ Latitude
: num -27.5 ...
## $ Longitude
: num 153 ...
## $ Talkback.number : chr "1300 222 612" ...
## $ Enquiries.number: chr "07 3377 5222" ...
## $ Fax.number
: chr "07 3377 5612" ...
## $ Sms.number
: chr "0467 922 612" ...
## $ Street.number
: chr "114 Grey Street" ...
## $ Street.suburb
: chr "South Brisbane" ...
## $ Street.postcode : int 4101 4700 ...
## $ PO.box
: chr "GPO Box 9994" ...
## $ PO.suburb
: chr "Brisbane" ...
## $ PO.postcode
: int 4001 4700 ...
## $ Twitter
: chr " 612brisbane" ...
## $ Facebook
: chr " http://www.facebook.com/612ABCBrisbane" ...
As you can tell, most of the 18 variables are in "character" mode. Only $Latitude,
$Longitude, $Street.postcode and $PO.postcode have a dierent mode.
2.3.2 Reading raw text
If what we want is to import text as is (i.e. we want to read raw text) then we need to use
readLines(). This function is the one we should use if we don’t want R to assume that the
data is any particular form. The way we work with readLines() is by passing it the name
of a le or the name of a URL that we want to read. The output is a character vector with
one element for each line of the le or url, containing the contents of each line.
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
20
Let’s see how to read a text le. For this example we will use a text le from the site
TEXTFILES.COM (by Jason Scott)http://www.textfiles.com/music/ . This site con-
tains a section of music related text les. For demonstration purposes let’s consider the \Top
105.3 songs of 1991" according to the \Modern Rock" radio station KITS San Francisco.
The corresponding txt le is located at:http://www.textfiles.com/music/ktop100.txt.
To read the le with the function readLines():
# read  ktop100.txt  file
top105 = readLines("http://www.textfiles.com/music/ktop100.txt")
readLines() creates a character vector in which each element represents the lines of the
URL we are trying to read. To know how many elements (i.e how many lines) are in top105
we can use the function length(). To inspect the rst elements (i.e. rst lines of the text
le) use head()
# how many lines
length(top105)
## [1] 123
# inspecting first elements
head(top105)
## [1] "From: ed@wente.llnl.gov (Ed Suranyi)"
## [2] "Date: 12 Jan 92 21:23:55 GMT"
## [3] "Newsgroups: rec.music.misc"
## [4] "Subject: KITS  year end countdown"
## [5] ""
## [6] ""
Looking at the output provided by head() the rst four lines contain some information about
the subject of the email (KITS’ year end countdown). The fth and sixth lines are empty
lines. If we inspect the next few lines, we’ll see that the list of songs in the top100 starts at
line number 11.
# top 5 songs
top105[11:15]
## [1] "1. NIRVANA
SMELLS LIKE TEEN SPIRIT"
## [2] "2. EMF
UNBELIEVABLE"
## [3] "3. R.E.M.
LOSING MY RELIGION"
## [4] "4. SIOUXSIE & THE BANSHEES
KISS THEM FOR ME"
## [5] "5. B.A.D. II
RUSH"
Each line has the ranking number, followed by a dot, followed by a blank space, then the
name of the artist/group, followed by a bunch of white spaces, and then the title of the song.
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
21
As you can see, the number one hit of 1991 was \Smells like teen spirit" by Nirvana.
What about the last songs in KITS’ ranking? In order to get the answer we can use the
tail() function to inspect the last n = 10 elements of the le:
# inspecting last 10 elements
tail(top105, n = = 10)
## [1] "101. SMASHING PUMPKINS
SIVA"
## [2] "102. ELVIS COSTELLO
OTHER SIDE OF ..."
## [3] "103. SEERS
PSYCHE OUT"
## [4] "104. THRILL KILL CULT
SEX ON WHEELZ"
## [5] "105. MATTHEW SWEET
I VE BEEN WAITING"
## [6] "105.3 LATOUR
PEOPLE ARE STILL HAVING SEX"
## [7] ""
## [8] "Ed"
## [9] "ed@wente.llnl.gov"
## [10] ""
Note that thelastfour lines don’tcontain information about thesongs. Moreover, the number
of songs does not stop at 105. In fact the ranking goes till 106 songs (last number being
105.3)
We’ll stop here the discussion of this chapter. However, it is importat to keep in mind that
text les come in a great variety of forms, shapes, sizes, and  avors. For more information on
howto importles in R,the authoritativedocument is the guide on R Data Import/Export
(by the R Core Team) available at:
http://cran.r-project.org/doc/manuals/r-release/R-data.html
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
22
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
Documents you may be interested
Documents you may be interested