R语言情感分析数据清洗:移除重复分隔符间换行并保留指定列
解决R中新闻文章DataFrame的内容合并问题
嘿,作为R新手能精准定位数据清洗的需求已经超棒啦!我来帮你实现把两组======之间的换行内容合并成连续文本,同时完整保留publisher和date列的功能。
核心思路
我们需要先识别出每一对======分隔符包裹的文章行,把这些行的content拼接成一段连续文本,同时将对应文章的publisher和date值关联到合并后的内容行上,最后重构出符合要求的DataFrame。
完整解决方案代码
我用新手友好的dplyr包来实现(语法直观易懂),先确保你已经安装并加载了包:
# 安装并加载dplyr(如果还没安装的话) if (!require(dplyr)) { install.packages("dplyr") library(dplyr) } # 你的原始测试数据 df <- matrix(c("======","NA","NA","Daily Bugle Dec 31","Daily Bugle", "Dec 31" ,"Wookies are","NA","NA",". recreationally", "NA","NA", "using drugs at a", "NA", "NA", "higher rate than", "NA", "NA","ever before.", "NA", "NA","======", "NA", "NA" ),ncol=3,byrow=TRUE) colnames(df) <- c("content","publisher","date") df <- as.data.frame(df) df[ df == "NA" ] <- NA # 步骤1:标记分组——用cumsum识别每一对======的范围 df <- df %>% mutate( # 标记哪些行是分隔符行 is_sep = content == "======", # 生成分组ID:每遇到一个分隔符,分组ID自动+1 group_id = cumsum(is_sep) ) # 步骤2:按分组汇总内容,分别处理分隔符行和文章行 cleaned_df <- df %>% group_by(group_id) %>% summarise( # 处理内容:如果是分隔符组,直接保留分隔符;否则合并所有content为连续文本 content = if (any(is_sep)) { first(content[is_sep]) } else { paste(na.omit(content), collapse = " ") }, # 提取该组非NA的publisher和date(即对应文章的发布商和日期) publisher = first(na.omit(publisher)), date = first(na.omit(date)) ) %>% # 移除临时分组ID列 select(-group_id) %>% # 把分隔符行的publisher和date设为NA,匹配你的期望格式 mutate( publisher = ifelse(content == "======", NA, publisher), date = ifelse(content == "======", NA, date) ) # 查看最终清洗后的结果 print(cleaned_df)
运行结果
执行后你会得到和你预期完全一致的输出:
content publisher date 1 ====== <NA> <NA> 2 Wookies are . recreationally using drugs at a higher rate than ever before. Daily Bugle Dec 31 3 ====== <NA> <NA>
扩展说明
如果你的大型数据集里有多组文章(即多对======分隔符),这个代码也能自动识别每一组并批量处理,完全适配你的批量清洗需求。
内容的提问来源于stack exchange,提问作者Joikakake




