如何在RStudio中提取Excel列内首字母大写的单词
解决方案
你之前用的方法没命中核心需求:
str_subset(x, "^[[:upper:]]")是筛选整行文本以大写字母开头的行,不是提取行内的大写单词,完全不对路gsub("\\b[a-z]+\\s+", "", x)只去掉了小写开头的单词和后续空格,但数字、标点、重复的大写单词都没处理,所以没用
用R的stringr包可以轻松解决,步骤如下:
1. 加载依赖包并读取Excel数据
# 先安装需要的包(如果没装过) install.packages(c("readxl", "stringr")) library(readxl) library(stringr) # 读取Excel文件,替换成你的文件路径 df <- read_excel("your_file.xlsx") # 假设目标列叫"sample_col",提取该列文本 text_col <- df$sample_col
2. 提取首字母大写的单词并去重
# 从每行提取所有首字母大写的单词,返回列表 capital_words_list <- str_extract_all(text_col, "\\b[[:upper:]][a-z]+\\b") # 把列表展开为向量,去重后得到唯一的大写单词(这里就是"European") unique_capital_word <- unique(unlist(capital_words_list)) # 如果要把原列替换成清理后的结果(每行保留唯一的大写单词) df$cleaned_col <- sapply(capital_words_list, function(words) unique(words)[1])
正则解释
\\b[[:upper:]][a-z]+\\b:
\\b:匹配单词边界,确保提取的是完整单词[[:upper:]]:匹配单词开头的大写字母[a-z]+:匹配后续的小写字母(至少1个)\\b:匹配单词结尾的边界
3. 直接清理文本(可选)
如果想直接把每行文本处理成只保留大写单词,也可以用这个写法:
df$cleaned_col <- text_col %>% # 去掉数字、标点、小写单词 str_replace_all("\\d+,?\\d*|,|\\b[a-z]+\\b", "") %>% # 去掉多余空格 str_squish() %>% # 去重(因为每行可能重复出现European) sapply(function(x) unique(str_split(x, " ")[[1]])) %>% # 转成字符向量 as.character()
内容的提问来源于stack exchange,提问作者Oliwia Roszak
相关产品推荐
相关产品推荐

