R语言 处理文本
R编程语言用于统计计算,被许多数据挖掘者和统计学家用于开发统计软件和数据分析。它包括机器学习算法、线性回归、时间序列、统计推理等等。R及其库实现了各种各样的统计和图形技术,包括线性和非线性建模、经典、统计测试、时间序列分析、分类、聚类和其他。
任何写在双引号内的值在R中都被视为字符串。字符串是一个字符数组,这些字符的集合被存储在一个变量内。在内部,R将每个字符串都存储在双引号内,即使你用单引号创建它们。
R – 与文本打交道
可以通过这些方式来实现
- 在R中使用内置类型
- 使用Tidyverse模块
- 使用regex和外部模块
- 使用grep()。
方法1:使用内置类型
在这个方法中,我们使用一个内置类型来处理文本。
Variable_name <- "String"
例子
# R program to demonstrate
# creation of a string
a < -"hello world" print(a)
输出
"hello world"
以下是在处理字符串时需要遵循的规则清单
- 字符串开头和结尾的引号应该都是双引号或单引号。它们不能混合使用。
- 双引号可以插入到一个以单引号开始和结束的字符串中。
- 单引号可以插入到以双引号开头和结尾的字符串中。
字符串操作
字符串操作是一个过程,用户被要求处理一个给定的字符串并使用/改变其数据。在R中,有不同的方法来操作字符串,具体如下。
- 串联字符串 – paste()函数: 该函数用于在R中串联字符串,它可以接受n个参数来串联。
语法: paste(…., sep = ” “, collapse =NULL )
参数
- ….. : 它用于传递n个参数来组合在一起。
- sep : 它用于表示参数之间的分隔符。它是可选的。
- collapse : 它用于删除两个字符串之间的空格,但不包括一个字符串中两个词的空格。
例子
# concatenate two strings
str1 <- "hello"
str2 <- "how are you?"
print(paste(str1, str2, sep = " ", collapse = "NULL"))
输出
"hello how are you?"
- 格式化数字和字符串 – format()函数: 该函数用于将字符串和数字按指定的样式进行格式化。
语法: format(x, digits, nsmall, scientific, width, justify = c(“left”, “right”, “center”, “none”)
参数
- x 是输入的向量。
- digits 这里是显示的总位数。
- nsmall 是小数点右边的最小数字数。
- scientific 被设置为TRUE,以显示科学符号。
- width 表示通过在开头填充空白来显示的最小宽度。
- justify 是指字符串向左、向右或向中间显示。
例子
# formatting numbers and strings
# Total number of digits displayed.
# Last digit rounded off.
result < - format(69.145656789, digits=9)
print(result)
# Display numbers in scientific notation.
result < - format(c(3, 132.84521),
scientific=TRUE)
print(result)
# The minimum number of digits
# to the right of the decimal point.
result < - format(96.47, nsmall=5)
print(result)
# Format treats everything as a string.
result < - format(8)
print(result)
# Numbers are padded with blank
# in the beginning for width.
result < - format(67.7, width=6)
print(result)
# Left justify strings.
result < - format("Hello", width=8,
justify="l")
print(result)
输出
[1] "69.1456568"
[1] "3.000000e+00" "1.328452e+02"
[1] "96.47000"
[1] "8"
[1] " 67.7"
[1] "Hello "
- 计算字符串中的字符数 – nchar() 函数: 该函数用于计算字符串中的字符数和空格数。
语法: ncar(x)
参数
- x 是这里输入的向量。
例子
# to count the number of characters
# in the string
a <- nchar("hello world")
print(a)
输出
[1] 11
- **改变字符串的大小写 – toupper() & tolower() 函数: **这些函数用于改变字符串的大小写。
语法: toupper(x) 和 tolower(x)
参数
- x 是输入的向量
例子
# Changing to Upper case.
a <- toupper("hello world")
print(a)
# Changing to lower case.
b <- tolower("HELLO WORLD")
print(b)
输出
"HELLO WORLD"
"hello world"
- 提取字符串的一部分 – substring()函数: 该函数用于提取字符串的一部分。
语法: substring(x, first, last)
参数
- x 是输入的字符向量。
- first 是要提取的第一个字符的位置。
- last 是要提取的最后一个字符的位置。
例子
# Extract characters from 1th to 3rd position.
c <- substring("Programming", 1, 3)
print(c)
输出
"Pro"
方法2:使用Tidyverse模块
在这个方法中,我们将使用Tidyverse模块,它包括数据科学工作流程中所需要的所有软件包,从数据探索到数据可视化。 stringr是一个库,有许多用于数据清理和数据准备任务的功能。它也是为处理字符串而设计的,有许多函数使这一过程变得简单。
我们正在使用这个文本进行处理 。
string <- c("WelcometoGeeksforgeeks!")
例1: 检测 字符串
在这个例子中,我们将使用 str_detect() 方法检测字符串。
语法: str_detect( string, “text in string”)
参数
- string 是输入的向量
library(tidyverse)
str_detect(string, "geeks")
输出
TRUE
例2:定位字符串
在这个例子中,我们将使用 str_locate() 方法检测字符串。
语法: str_locate( string, “text in string”)
参数
- string 是输入的向量
library(tidyverse)
str_locate(string, "geeks")
输出
start end
18 22
例3:提取字符串
在这个例子中,我们将使用 str_extract() 方法检测字符串。
语法: str_extract( string, “text in string”)
参数
- String 是输入的矢量
library(tidyverse)
str_extract(string, "for")
输出
for
例四:替换字符串
在这个例子中,我们将使用 str_replace() 方法检测字符串。
语法: str_replace( string, “text in string”)
参数
- String 是输入的向量
library(tidyverse)
str_replace(string, "toGeeksforgeeks", " geeks")
输出
'Welcome geeks!'
方法3:使用regex和外部模块
在这个方法中,我们使用regex,使用一个外部模块,比如stringr。
例子1:使用点选择字符
这里我们将使用点(.)来选择字符串中的字符。
string <- c("WelcometoGeeksforgeeks!")
str_extract_all(string, "G..k")
输出
Geek
Example 2: 使用 \D 选择字符串
\D是用来选择regex中的任何字符和数字。
str_extract_all(string, "W\\D\\Dcome")
输出
'Welcome'
方法4:使用grep()
grep()函数返回在向量中发现该模式的索引。如果该模式有多个出现,它会返回一个出现的索引列表。这非常有用,因为它不仅告诉我们模式的出现,还告诉我们它在矢量中的位置。
语法: grep(pattern, string, ignore.case=FALSE)
参数
- pattern: 一个正则表达式模式。
- string: 要搜索的字符向量。
- ignore.case: 在搜索中是否忽略大小写。这里ignore.case是一个可选的参数,默认设置为FALSE。
例子1: 要找到字符串中特定单词的所有实例。
str <- c("Hello", "hello", "hi", "hey")
grep('hey', str)
输出
4
例2: 寻找字符串中特定单词的所有实例,不考虑大小写。
str <- c("Hello", "hello", "hi", "hey")
grep('he', str, ignore.case ="True")
输出
[1] 1 2 4