如何在R中按author_id合并多行数据为单行并导出文本文件
数据与需求说明
原始Excel数据结构
name author_id rating Name1 Id 1 0.72 Name2 Id 2 0.9 Name3 Id 1 0.74 Name4 Id 1 0.76 Name5 Id 2 0.88 Name1 Id 3 0.8 Name3 Id 2 0.86 Name6 Id 3 0.84 Name3 Id 3 0.84 Name4 Id 4 0.78 Name1 Id 4 0.84 Name6 Id 5 0.84 Etc. … …
目标输出格式
需要按author_id分组,每个分组对应一行文本,内容为name与rating交替排列,用制表符分隔:
Name1 0.72 Name3 0.74 Name4 0.76 Name2 0.9 Name5 0.88 Name3 0.86 Name1 0.8 Name6 0.84 Name3 0.84 Name4 0.78 Name1 0.84 Name6 0.84
原代码问题分析
你提供的代码存在两处关键问题:
summarise中重复定义rating参数,且paste的collapse参数位置错误,语法不合法- 逻辑上未实现
name与对应rating的配对,只是单独合并所有name和所有rating,无法达到交替排列的效果
正确解决方案
以下是修正后的代码,可完全实现需求:
library(readxl) library(dplyr) # 读取Excel数据 df <- read_excel("/Users/admin/Documents/restaurants.xlsx") # 按author_id分组,将每组的name和rating配对后合并为一行 df_grouped <- df %>% group_by(author_id) %>% summarise(content = paste(paste(name, rating, sep = "\t"), collapse = "\t"), .groups = "drop") # 写入文本文件,不保留行名和列名 writeLines(df_grouped$content, con = "transactionsBy_author_id.txt")
代码说明
- 分组处理逻辑:
- 内层
paste(name, rating, sep = "\t"):将每个条目对应的name和rating用制表符连接,形成NameX\t0.XX的配对格式 - 外层
paste(..., collapse = "\t"):将组内所有配对后的内容合并成一行,保证name和rating交替排列 .groups = "drop":分组后取消分组状态,避免后续操作出现不必要的警告
- 内层
- 文件写入:
- 使用
writeLines直接写入处理好的每行内容,确保输出格式与目标完全一致,不会额外添加列名、行号或多余分隔符
- 使用
内容的提问来源于stack exchange,提问作者Meem
相关产品推荐
相关产品推荐

