【发布时间】:2021-11-10 01:44:58
【问题描述】:
我有以下向量:
vector1 <- c("Frank frank", "Frank", "Fred", "frank")
我希望确定单词'Frank' 或'frank' 在向量中出现了多少次。我想计算单个出现的次数并跟踪该模式在向量内的每个字符串中出现的次数。
结果应该是这样的:
2 1 0 1
谢谢!
【问题讨论】:
标签: r
我有以下向量:
vector1 <- c("Frank frank", "Frank", "Fred", "frank")
我希望确定单词'Frank' 或'frank' 在向量中出现了多少次。我想计算单个出现的次数并跟踪该模式在向量内的每个字符串中出现的次数。
结果应该是这样的:
2 1 0 1
谢谢!
【问题讨论】:
标签: r
我们可以使用str_count,将模式包装在修饰符中,例如regex 并使用附加参数,即 ignore_case,默认为 FALSE
library(stringr)
str_count(vector1, regex('Frank', ignore_case = TRUE))
[1] 2 1 0 1
或使用base R,将单词提取到list,然后计算列表的lengths,即每个列表元素的长度
lengths(regmatches(vector1, gregexpr("[Ff]rank", vector1)))
[1] 2 1 0 1
【讨论】:
base 函数的解决方案?
结合gregexpr 和regmatches 可以是一种base-r 方法
v = c("Frank frank", "Frank", "Fred", "frank")
res = regmatches(v, gregexpr('frank', v, ignore.case = T))
res
[[1]]
[1] "Frank" "frank"
[[2]]
[1] "Frank"
[[3]]
character(0)
[[4]]
[1] "frank"
lengths(res)
[1] 2 1 0 1
【讨论】:
您还可以折叠“Frank”的两个版本或使用通用正则表达式:
library(stringr)
str_count(vector1, "[fF]rank")
OR
str_count(vector1, "Frank|frank")
[1] 2 1 0 1
【讨论】: