如何在R中使用正则表达式拆分列标签并统计频率?
拆分字符串格式的标签列并统计出现频率
你的hashtags列是字符串形式的列表结构,需要先清理格式再拆分标签,下面提供两种实现方式:
方法一:使用tidyverse工具包(推荐)
tidyverse的dplyr和tidyr能更直观地完成数据清洗和拆分操作:
# 加载工具包 library(tidyverse) # 清洗标签列并拆分到单独行 twts_clean <- twts %>% # 移除字符串中的方括号、单引号 mutate(hashtags = str_remove_all(hashtags, "\\[|\\]|'") %>% # 按逗号+可选空格拆分标签 str_split(",\\s*")) %>% # 将每个标签拆分为独立行 unnest(hashtags) # 统计标签出现频率(按次数降序) hashtag_freq <- twts_clean %>% count(hashtags, sort = TRUE) # 查看结果 print(hashtag_freq)
步骤解释:
str_remove_all():清理掉标签字符串里的格式符号([]和'),只保留标签内容str_split(",\\s*"):以逗号和后续可能的空格为分隔符,把每行的标签拆成列表unnest():把列表中的每个标签展开成单独的行,让每个标签对应一条记录count():自动统计每个标签的出现次数,sort=TRUE让结果按次数从多到少排列
方法二:基础R实现(无需额外包)
如果不想加载第三方包,可以用基础R函数完成:
# 第一步:清理标签字符串并拆分 hashtags_list <- strsplit(gsub("\\[|\\]|'", "", twts$hashtags), ",\\s*") # 第二步:将所有标签合并为一个向量 all_hashtags <- unlist(hashtags_list) # 第三步:统计频率并排序 hashtag_freq <- table(all_hashtags) hashtag_freq_df <- as.data.frame(hashtag_freq) %>% arrange(desc(Freq)) # 查看结果 print(hashtag_freq_df)
步骤解释:
gsub():全局替换掉所有格式符号,得到纯标签组成的字符串strsplit():拆分字符串得到标签列表unlist():把列表展开为包含所有标签的一维向量table():统计每个标签的出现次数,后续转成数据框并按次数降序排列
额外提示
如果需要忽略标签的大小写差异(比如避免区分Sinopharm和sinopharm),可以在拆分后统一转成小写:
# tidyverse方式中添加转小写步骤 twts_clean <- twts %>% mutate(hashtags = str_remove_all(hashtags, "\\[|\\]|'") %>% str_split(",\\s*")) %>% unnest(hashtags) %>% mutate(hashtags = tolower(hashtags)) # 基础R方式中修改向量 all_hashtags <- tolower(unlist(hashtags_list))
内容的提问来源于stack exchange,提问作者andrew
相关产品推荐
相关产品推荐

