如何在R中对含可变长度字符串及数字序列的列进行分类?
解决方案
我们可以利用字符串的固定前缀模式,通过正则匹配快速完成分类,以下是具体的R代码实现:
1. 构造示例数据
library(dplyr) library(stringr) # 构造标签数据 tags <- c( "#Name-account-dynamic-table-301889874517022", "#Name-account-dynamic-table-301892680435489", "#Name-account-dynamic-table-301898303041520", "#Name-account-dynamic-table-301899707194367", "#PartyName-_oj131-300010926780895", "#PartyName-_oj145-100049488429695", "#PartyName-_oj148-100046909736911", "#PartyName-_oj156-100039245551420", "#SalesCreditImage_100005748173584", "#SalesCreditImage_1676885837179", "#SalesCreditImage_1676894490983", "#SalesCreditImage_1677180209183", "#SalesCreditImage_1677221857743", "#SalesCreditImage_300007572814764", "#SalesCreditImage_300010430355109", "#_oj1046_headerContainer", "#_oj1053_headerContainer", "#_oj110_h" ) df <- tibble(序号 = 1:18, 标签 = tags)
2. 添加分类列
用case_when结合str_detect匹配前缀模式,给每行分配对应类别:
df <- df %>% mutate(类别 = case_when( str_detect(标签, "^#Name-account-dynamic-table-") ~ "第一类", str_detect(标签, "^#PartyName-_oj") ~ "第二类", str_detect(标签, "^#SalesCreditImage_") ~ "第三类", str_detect(标签, "^#_oj\\d+_headerContainer") ~ "第四类", str_detect(标签, "^#_oj110_h") ~ "第五类", TRUE ~ "未分类" # 兜底处理,避免遗漏特殊情况 ))
3. 验证结果
运行代码后,df会新增类别列,对应你需要的分类规则。打印完整数据框查看结果:
print(df, n = 18)
代码说明
str_detect(标签, "^xxx"):^表示匹配字符串开头,确保只匹配以指定前缀开头的标签,避免误匹配。- 正则表达式
^#_oj\\d+_headerContainer中,\\d+匹配一个或多个数字,能覆盖所有#_ojxxx_headerContainer格式的标签。 - 单独匹配
#_oj110_h是因为它的模式与第四类不同,直接指定即可。
内容的提问来源于stack exchange,提问作者user2845095
相关产品推荐
相关产品推荐

