如何计算R语言字符串变量中各字符的占比?
计算字符串变量中单个字符的占比
示例数据集
a <- c("CC", "CCAA", "ABB") id <- c("a", "b", "c") data <- data.frame(id, a) head(data) # id a #1 a CC #2 b CCAA #3 c ABB
现有实现:统计每行字符串的占比
library(data.table) data1 <- setDT(data)[, .N, .(a)][, perc := N/sum(N), .()][] head(data1) # a N perc # 1: CC 1 0.3333333 # 2: CCAA 1 0.3333333 # 3: ABB 1 0.3333333
需求目标
统计整个a变量中每个单个字符的出现次数及占比,预期输出:
# a N perc # 1: A 3 0.33 # 2: B 2 0.22 # 3: C 4 0.44
解决方案
方法1:R Base原生实现
# 拆分所有字符串为单个字符 chars <- unlist(strsplit(data$a, "")) # 统计字符出现次数 char_counts <- table(chars) # 转换为数据框并计算占比 result_base <- data.frame( a = names(char_counts), N = as.integer(char_counts), perc = round(as.numeric(char_counts)/sum(char_counts), 2) ) # 查看结果 result_base # a N perc # A A 3 0.33 # B B 2 0.22 # C C 4 0.44
方法2:tidyverse生态实现
library(tidyverse) result_tidy <- data %>% # 将每个字符串拆分为单个字符,展开为多行 mutate(a = str_split(a, "")) %>% unnest(a) %>% # 统计每个字符的出现次数 count(a, name = "N") %>% # 计算占比并保留两位小数 mutate(perc = round(N/sum(N), 2)) # 查看结果 result_tidy # # A tibble: 3 × 3 # a N perc # <chr> <int> <dbl> # 1 A 3 0.33 # 2 B 2 0.22 # 3 C 4 0.44
内容的提问来源于stack exchange,提问作者choij
相关产品推荐
相关产品推荐

