我只想计算一个字符串的出现次数,例如'xy'
,在另一个字符串中,例如'kxyloixyea'
,无需使用任何其他库。
关于列和数据框的问题和答案很多,这也许就是为什么我找不到这个最简单的基本问题的答案的原因。 (以下是该帖子被无理地标记为重复的许多相关帖子之一:How to calculate the number of occurrence of a given character in each row of a column of strings? 这又与数据帧和向量有关,因此我找不到适合我的“字符串中的字符串”问题的答案。)
我想出了一种可能太复杂的解决方案:
lengths(gregexpr(str_to_count, str_to_search, fixed = TRUE))
# as e.g.:
lengths(gregexpr('xy', 'kxyloixyea', fixed = TRUE))
# correctly returns 2
这对我来说很好用,但是我无法想象没有一个更简单的方法(例如Python中的'kxyloixyea'.count('xy')
);但是我找不到它。
此外,仅供参考,当出现的次数为零时,此操作不起作用,然后再次返回1。在我的特定函数中,此操作永远不会发生,但是仍然很高兴看到一个涵盖该范围的解决方案(没有其他复杂性)
(注意:fixed = TRUE
并非偶然,我不需要正则表达式。)
这是另一种解决方案:
str_to_count = 'xy'
str_to_search = 'kxyloixyea'
lengths(strsplit(str_to_search, str_to_count, fixed = T)) - 1
这没有任何作用,但是在str_to_search
为空(""
)时无效。而且,它看起来并不比上面的更好。
这是处理空str_to_search
的修改版本:
lengths(strsplit(paste0(str_to_search, str_to_count), str_to_count, fixed = T)) - 1
再一次,对于这样一个简单的问题似乎很荒谬。
答案 0 :(得分:1)
下面的代码适用于您描述的每种情况(不需要像'-1'这样的技巧):
str_to_count = "xy" #setting variables
str_to_search = "kxyloixyea"
lengths(regmatches(str_to_search, gregexpr(str_to_count, str_to_search, fixed = TRUE)))