You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:00:35