R语言读取TXT到data.frame后去重并写入新文件方法
解决大文件去重后写入的问题
嘿,我来帮你搞定这个大文件去重后写入的问题!针对你120多万行的数据集,我给你两种方案,兼顾基础用法和大文件的高效处理:
方案一:Base R 基础实现
你已经成功读取了文件,接下来只需要用base R自带的unique()函数去重,再正确写入即可。这个函数会自动保留每组重复行中的第一个唯一实例,完全符合你的需求(比如示例里的A; a重复多次,只会保留第一次出现的那一行)。
# 读取文件(你的原代码,注意变量名尽量避免用`t`,容易和函数名冲突,这里保留你的写法) t <- read.table('/home/BigClaster.txt', sep=';', header = FALSE) # 对data.frame去重,保留唯一行 t_unique <- unique(t) # 验证去重后的行数(应该和你看到的1,095,079一致) nrow(t_unique) # 写入新文件,注意参数设置保证格式和原文件一致 write.table( t_unique, '/home/BigClaster_unique.txt', sep=';', # 保持原分隔符 row.names=FALSE, # 不写入行号(避免新增多余内容) col.names=FALSE, # 不写入表头(原文件没有表头) quote=FALSE # 避免给内容自动加引号 )
方案二:Data.table 高效处理(推荐大文件)
如果你的文件在处理时遇到内存紧张或者速度慢的问题,推荐用data.table包,它专门优化了大文件的读取、处理和写入速度,内存占用也比base R少很多:
# 先安装并加载data.table(第一次用需要安装) install.packages("data.table") library(data.table) # 快速读取大文件,比read.table快很多 dt <- fread('/home/BigClaster.txt', sep=';', header = FALSE) # 高效去重,默认保留第一次出现的唯一行 dt_unique <- unique(dt) # 验证行数 nrow(dt_unique) # 快速写入文件,格式和原文件一致 fwrite( dt_unique, '/home/BigClaster_unique.txt', sep=';', row.names=FALSE, col.names=FALSE, quote=FALSE )
可能的写入问题排查
你提到写入时遇到问题,大概率是write.table()的默认参数导致格式混乱:
- 默认会写入行号(
row.names=TRUE),导致新文件多了一列内容 - 默认会给字符串加引号(
quote=TRUE),破坏原格式 - 一定要确保
col.names=FALSE,因为原文件没有表头
如果还是有问题,可以检查目标文件的写入权限,或者看看内存是否足够(大文件处理时尽量关闭其他占用内存的程序)。
内容的提问来源于stack exchange,提问作者Dossanov
相关产品推荐
相关产品推荐

