在R中结合正则表达式与向量实现文本替换:Spotify数据处理
用正则表达式与向量清理Spotify流派数据
针对你从Spotify抓取的包含曲目、艺术家和流派的数据框,我会一步步展示如何用正则表达式和向量完成文本替换与清理工作。首先我们先完整复现你的数据:
# 构建数据框 tracks <- data.frame( 曲目 = c("Run the World (Girls)", "LOCO", "Habits", "Never Born - 2017 Version"), 艺术家 = c("Beyoncé", "NERVO", "Marmozets", "Guano Apes"), 流派 = c("dance pop pop post-teen pop r&b", "australian dance big room deep big room edm electro house house progressive electro house progressive house", "alt-indie rock british alternative rock pixie", "alternative metal funk me...") )
接下来我们分几个核心场景处理:
1. 修复截断的流派名称
你最后一条数据里的funk me...是截断的流派名,我们可以用正则表达式移除无效后缀,或者根据上下文替换为完整名称:
# 方式1:移除末尾的" me..."截断部分 tracks$流派 <- gsub(" me\\.\\.\\.$", "", tracks$流派) # 方式2:如果推测是"funk metal",直接替换 # tracks$流派 <- gsub("funk me\\.\\.\\.", "funk metal", tracks$流派)
2. 去重重复的流派
第二条数据里多次出现big room、house等重复流派,我们可以写一个小函数实现单条记录内的流派去重:
# 定义去重函数 去重流派 <- function(流派字符串) { # 按空格拆分流派 流派列表 <- strsplit(流派字符串, "\\s+")[[1]] # 去重后重新拼接 paste(unique(流派列表), collapse = " ") } # 应用到整个流派列 tracks$流派 <- sapply(tracks$流派, 去重流派)
3. 标准化流派术语
如果需要统一流派命名(比如alt-indie rock改为alternative indie rock),可以用命名向量批量替换:
# 加载stringr包(需要先安装:install.packages("stringr")) library(stringr) # 定义替换规则的命名向量 替换规则 <- c( "alt-indie rock" = "alternative indie rock", "big room deep" = "deep big room" ) # 批量替换 tracks$流派 <- str_replace_all(tracks$流派, 替换规则)
4. 拆分流派为列表/多列
如果需要进一步分析单个流派,可以把流派拆分为列表列,或者固定数量的多列:
# 拆分为列表列(每个元素是该曲目的流派向量) tracks$流派列表 <- strsplit(tracks$流派, "\\s+") # 拆分为固定多列(先找到最大流派数量) 最大流派数 <- max(sapply(tracks$流派列表, length)) 流派列矩阵 <- do.call(rbind, lapply(tracks$流派列表, function(x) { length(x) <- 最大流派数 x })) colnames(流派列矩阵) <- paste0("流派_", 1:最大流派数) # 合并到原数据框 tracks <- cbind(tracks, 流派列矩阵)
经过以上处理,你的流派数据就会变得整洁规范,方便后续分析啦!
内容的提问来源于stack exchange,提问作者chainhomelow
相关产品推荐
相关产品推荐

