如何在R中按向量分类统计字符串中的字符数量
在R中统计字符串中指定字符组的出现次数
先明确你的字符分组和待处理字符串:
v1 <- c("R", "H", "K") # * (asterisk sign) v2 <- c("D", "E") # + (plus sign) v3 <- c("A") # - (minus sign) x1 <- "GMRRRARRRS" x2 <- "KMRDFRHRAE"
下面提供两种实用的实现方式,都能生成你需要的数据框格式:
方法1:基础R原生实现
不需要额外安装包,适合追求轻量的场景:
- 先写一个通用统计函数,处理单个字符串:
count_char_groups <- function(target_str, char_groups) { # 把字符串拆成单个字符的向量 split_chars <- strsplit(target_str, "")[[1]] # 对每个字符组统计匹配的数量 sapply(char_groups, function(group) sum(split_chars %in% group)) }
- 整理字符组并批量处理:
# 定义字符组,同时指定最终数据框的列名 groups <- list( "R,H,K" = v1, "D,E" = v2, "A" = v3 ) # 把待处理字符串放到一个向量里 input_strs <- c(x1, x2) # 批量统计并转成数据框 result_df <- as.data.frame(t(sapply(input_strs, count_char_groups, char_groups = groups)))
运行后查看结果:
result_df # R,H,K D,E A # GMRRRARRRS 6 0 1 # KMRDFRHRAE 5 2 1
方法2:tidyverse工具链实现
如果日常用tidyverse,可以用更简洁的管道流写法:
library(tidyverse) # 构造数据并统计 tibble(original_str = input_strs) %>% mutate( `R,H,K` = str_count(original_str, paste(v1, collapse = "|")), `D,E` = str_count(original_str, paste(v2, collapse = "|")), `A` = str_count(original_str, v3) ) %>% column_to_rownames("original_str")
这里用str_count配合正则表达式(把字符组用|拼接成匹配规则),直接统计每个组的出现次数,结果和基础R方法完全一致。
内容的提问来源于stack exchange,提问作者littleworth
相关产品推荐
相关产品推荐

