如何自动统计字符串中重复次数最高的字符/数字的出现次数
R语言统计字符串最高频次字母/数字的实现方法
实现思路
- 先从输入字符串中分别提取字母、数字两类独立字符
- 对字母类可按需选择是否忽略大小写(根据你的示例数据,默认不区分大小写匹配)
- 统计每类字符的出现频次,返回最高频次值,无对应类型字符时返回0
tidyverse 实现方案(适合批量处理数据框)
1. 构造示例数据
library(tidyverse) # 示例数据框 df <- tibble( col1 = c("apples333", "summer13", "talk77", "Aa6668") )
2. 自定义统计函数
# 统计最高出现频次的字母次数 max_letter_count <- function(x, case_sensitive = FALSE) { chars <- str_extract_all(x, "[A-Za-z]")[[1]] if (length(chars) == 0) return(0) # 不区分大小写则统一转小写 if (!case_sensitive) chars <- str_to_lower(chars) max(table(chars)) } # 统计最高出现频次的数字次数 max_number_count <- function(x) { nums <- str_extract_all(x, "[0-9]")[[1]] if (length(nums) == 0) return(0) max(table(nums)) }
3. 批量应用到数据框
df <- df %>% rowwise() %>% mutate( repeated_letter = max_letter_count(col1), repeated_number = max_number_count(col1) ) %>% ungroup()
运行后得到的结果和你给出的示例完全匹配。
Base R 实现方案(无需额外安装依赖包)
# 字母统计函数 max_letter_count_base <- function(x, case_sensitive = FALSE) { chars <- regmatches(x, gregexpr("[A-Za-z]", x))[[1]] if (length(chars) == 0) return(0) if (!case_sensitive) chars <- tolower(chars) max(table(chars)) } # 数字统计函数 max_number_count_base <- function(x) { nums <- regmatches(x, gregexpr("[0-9]", x))[[1]] if (length(nums) == 0) return(0) max(table(nums)) } # 批量应用到数据框 df$repeated_letter <- sapply(df$col1, max_letter_count_base) df$repeated_number <- sapply(df$col1, max_number_count_base)
参数说明
如果需要区分字母大小写,只需将函数的case_sensitive参数设置为TRUE即可。
内容的提问来源于stack exchange,提问作者vicky
相关产品推荐
相关产品推荐

