R语言 如何计算一个字符在R数据框架的每一行中出现的次数
在这篇文章中,我们将讨论如何在R编程语言中计算DataFrame中每一行中出现的某个字符的数量。
方法1:使用stringr包
R编程语言中的stringr包可以用来进行字符串操作和提取,它可以被安装到工作空间。
str_count()方法用于返回字符串向量中指定模式的匹配情况。它返回一个整数向量,表示在输入参数向量中发现的模式实例的数量。str_count()方法是区分大小写的。
语法 。
str_count(str, pattern = “”)
参数:
- str – 字符串的向量或要搜索模式的单一字符串
- pattern – 要搜索的模式。通常是一个正则表达式。
该模式可以是一个单一的字符或一组字符叠加在一起。它甚至可能包含特殊符号或数字。如果没有找到该模式,将返回一个整数值0。
例子 。
# loading the reqd library
library ("stringr")
# creating a data frame
data_frame <- data.frame(
col1 = c(1:5), col2 = c("Geeks","for","geeks","CSE","portal"))
# character to search for
ch <- "e"
# counting the occurrences of character
count <- str_count(data_frame$col2, ch)
print ("Count of e :")
print (count)
输出
[1] “Count of e :”
[1] 2 0 2 0 0
方法2:使用grepexpr方法
基准R的gregexpr()方法用于指示一个模式在指定的字符向量中的位置。它用来返回一个与输入字符数组的每个分量相匹配的起始位置的向量。返回的向量的长度等同于原始字符串向量的长度。
语法。
gregexpr(pattern, str, ignore.case=FALSE)
参数:
- str – 搜索模式的字符串向量或单个字符串
- pattern – 要搜索的模式。通常是一个正则表达式。
- ignore.case – 是否忽略大小写的指标
这里,pattern是要搜索的字符,str是要查找pattern的字符串列。 regmatches()方法适用于该函数的输出,用于从匹配的数据中提取或替换匹配的子串。如果没有找到匹配的子串模式,将返回空字符串。
语法。
regmatches(str, m)
参数:
- m – 来自匹配数据的输出向量。
随后应用lengths()方法,从regmatches()向量中返回每个子串组件的长度。
例子 。
# creating a data frame
data_frame <- data.frame(
col1 = c(1:5), col2 = c("!?contains","do!es!nt",
"Contain","cs!!!e","circus?"))
print ("Original DataFrame")
print (data_frame)
# character to search for
ch <- "!"
count <- regmatches(
data_framecol2, gregexpr(ch, data_framecol2))
print ("Count of !")
# returning the number of occurrences
lengths(count)
输出
[1] “Original DataFrame”
col1 col2
1 1 !?contains
2 2 do!es!nt
3 3 Contain
4 4 cs!!!e
5 5 circus?
[1] “Count of !”
[1] 1 2 0 3 0
方法3:使用sapply方法
- R中的sapply()方法是用来在作为第一个参数的指定输入向量上应用一个用户定义的函数。在这种情况下,用户定义的函数由一连串的步骤组成。
语法 。
sapply ( x , fun)
- strsplit()方法用于将输入向量的每个分量根据””分隔符分割成多个分量。在一个字符串由多个单词组成的情况下,它很有用。它返回一个列中每个元素的单词数组。
- 然后将unlist()方法应用于字母向量中的每个单词,并检查每个字母是否等同于我们希望搜索的字符。然后应用sum()方法,在每次发现匹配的情况下增加计数。
语法 。
sum ( unlist( str) == ch)
例子 。
# creating a data frame
data_frame <- data.frame(
col1 = c(1:5), col2 = c("!?contains","do!es!nt",
"Contain","cs!!!e","circus?"))
print ("Original DataFrame")
print (data_frame)
# character to search for
ch <- "!"
count <- sapply(as.character(data_frame$col2),
function(x, letter = ch){
str <- strsplit(x, split = "")
sum(unlist(str) == letter)
})
print ("Count of !")
# returning the number of occurrences
print(count)
输出
[1] “Original DataFrame”
col1 col2
1 1 !?contains
2 2 do!es!nt
3 3 Contain
4 4 cs!!!e
5 5 circus?
[1] “Count of !”
!?contains do!es!nt Contain cs!!!e circus?
1 2 0 3 0