使用 R 计算字符串中的单句号和双句号
Count single full stop and double full stops in a String using R
我有一个示例字符串,如下所示
text = "这是一个优先事项。所以..."
我需要计算一个句号出现的次数,以及两个句号和三个句号同时出现的次数。
对于上面的说法,我需要我的回答是:
单个句号的数量:1,
两个加油站的数量:1,
三个句点的计数:1
我使用 R 代码:stringr::str_count(text,"\.\.\.")
--> 这让我对连续三个句号的计数为 1,这是正确的。
接下来我使用:stringr::str_count(text,"\.\.")
--> 这给了我 2 的值,因为另外三组句号同时出现。但我希望此计数为 1,而另一组必须符合 3 个句点的条件。
同样,我需要将单个句号计数为 '1' ,但上面的代码给了我 6,一起计数。我如何在 R 中实现这一点?
提前致谢。
如何在 R 中实现这一点?
您可以使用环视来限定您的句号正则表达式模式,以确保您获得正确的计数:
stringr::str_count(text, "(?<!\.)\.(?!\.)", perl=TRUE) # number of 1 full stops
stringr::str_count(text, "(?<!\.)\.\.(?!\.)", perl=TRUE) # number of 2 full stops
stringr::str_count(text, "(?<!\.)\.\.\.(?!\.)", perl=TRUE) # number of 3 full stops
我们可以将字符转换为原始字符,然后使用 rle
:
dots <- rle(charToRaw(x) == 46)
或者如果首选,则使用 strsplit
等效:
dots <- rle(strsplit(x, '')[[1]] == '.')
然后我们可以使用table得到频率:
table(dots$lengths[dots$values == T])
# 1 2 3 4
# 2 1 2 1
示例数据
x = "alksj.lij...lkasjdf.asl;k..aslkd;l....as;lkd..."
以下概括为一行代码中的任意数量的句号。它 returns 一个包含每个句号出现次数的列表。
library(tidyverse)
stops <- 1:3
map(stops, ~str_count(text, paste0("(?<!\.)\.{",.x,"}(?!\.)")))
我有一个示例字符串,如下所示
text = "这是一个优先事项。所以..."
我需要计算一个句号出现的次数,以及两个句号和三个句号同时出现的次数。 对于上面的说法,我需要我的回答是:
单个句号的数量:1, 两个加油站的数量:1, 三个句点的计数:1
我使用 R 代码:stringr::str_count(text,"\.\.\.")
--> 这让我对连续三个句号的计数为 1,这是正确的。
接下来我使用:stringr::str_count(text,"\.\.")
--> 这给了我 2 的值,因为另外三组句号同时出现。但我希望此计数为 1,而另一组必须符合 3 个句点的条件。
同样,我需要将单个句号计数为 '1' ,但上面的代码给了我 6,一起计数。我如何在 R 中实现这一点?
提前致谢。
如何在 R 中实现这一点?
您可以使用环视来限定您的句号正则表达式模式,以确保您获得正确的计数:
stringr::str_count(text, "(?<!\.)\.(?!\.)", perl=TRUE) # number of 1 full stops
stringr::str_count(text, "(?<!\.)\.\.(?!\.)", perl=TRUE) # number of 2 full stops
stringr::str_count(text, "(?<!\.)\.\.\.(?!\.)", perl=TRUE) # number of 3 full stops
我们可以将字符转换为原始字符,然后使用 rle
:
dots <- rle(charToRaw(x) == 46)
或者如果首选,则使用 strsplit
等效:
dots <- rle(strsplit(x, '')[[1]] == '.')
然后我们可以使用table得到频率:
table(dots$lengths[dots$values == T])
# 1 2 3 4
# 2 1 2 1
示例数据
x = "alksj.lij...lkasjdf.asl;k..aslkd;l....as;lkd..."
以下概括为一行代码中的任意数量的句号。它 returns 一个包含每个句号出现次数的列表。
library(tidyverse)
stops <- 1:3
map(stops, ~str_count(text, paste0("(?<!\.)\.{",.x,"}(?!\.)")))