如何用R语言提取Excel列首字母大写单词并统计出现频率?
处理Excel表格的祖先信息数据
步骤1:读取数据并按逗号拆分指定列
先加载所需工具包,读取Excel文件后,将目标列的内容按逗号(含后续可选空格)分割为列表格式:
# 加载必要包 library(readxl) library(stringr) library(dplyr) # 读取Excel数据,替换为你的文件路径 data <- read_excel("your_file_path.xlsx") # 按逗号拆分指定列,生成存储拆分结果的列表列 data$split_desc <- str_split(data$`INITIAL SAMPLE DESCRIPTION`, ",\\s*")
步骤2:编写函数提取首字母大写单词
自定义函数,输入文本内容后提取所有首字母大写的单词,自动过滤空字符串:
extract_cap_words <- function(text) { str_extract_all(text, "\\b[A-Z]\\w*") |> unlist() |> Filter(f = \(x) x != "") }
步骤3:生成每行对应的首字母大写单词列表
提供两种实现方式,按需选择:
方法1:用map批量处理(更简洁)
library(purrr) data$cap_words_list <- map(data$split_desc, extract_cap_words)
方法2:用for循环实现
# 初始化空列表列 data$cap_words_list <- vector("list", nrow(data)) # 逐行处理拆分后的内容 for (i in 1:nrow(data)) { data$cap_words_list[[i]] <- extract_cap_words(data$split_desc[[i]]) }
步骤4:统计每个单词的出现频率
合并所有行的单词列表后统计频率,可转为数据框方便查看排序:
# 合并所有单词到一个向量 all_cap_words <- unlist(data$cap_words_list) # 统计频率 word_freq <- table(all_cap_words) # 转为数据框并按频率降序排列(可选) word_freq_df <- as.data.frame(word_freq) |> rename(单词 = all_cap_words, 频率 = Freq) |> arrange(desc(频率)) print(word_freq_df)
关于你现有函数的说明
你当前使用的str_extract_all(data$INITIAL SAMPLE DESCRIPTION, "\\b[A-Z]\\w*") |> unique()存在两个问题:
- 未先按逗号拆分数据,直接提取整列内容的单词,会混淆同一单元格内的逗号分隔项
unique()会直接去重,丢失单词的重复出现记录,无法统计真实频率
内容的提问来源于stack exchange,提问作者Oliwia Roszak
相关产品推荐
相关产品推荐

