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

R语言按指定列去重后合并其余列唯一值的实现方法求助

可用解决方案(适配19列、500万行大数据量场景)

所有方案均支持自动处理除分组列V1之外的所有列,无需手动指定剩余列名,自动完成唯一值合并。

1. R 方案(推荐R用户使用,data.table性能极强,适配千万级行数据)

使用data.table包的分组聚合能力,读写大文件速度远快于base R和tidyverse系列工具:

# 加载包
library(data.table)
# 读取大文件,自动识别分隔符
dt <- fread("你的输入文件路径.txt")
# 按V1分组,其余所有列取唯一值后用|拼接
res <- dt[, lapply(.SD, function(x) paste(unique(x), collapse = "|")), by = V1]
# 输出结果
fwrite(res, "你的输出文件路径.txt", sep = "\t")

2. Python 方案

如果追求更低内存占用、更快处理速度,推荐使用polars库,比pandas更适配超大数据表:

Polars 版本

import polars as pl
# 读取文件
df = pl.read_csv("你的输入文件路径.txt", separator="\t")
# 按V1分组,所有列取唯一值后拼接
res = df.group_by("V1", maintain_order=True).agg(
    pl.all().unique().map_elements(lambda x: "|".join(x), return_dtype=str)
)
# 输出结果
res.write_csv("你的输出文件路径.txt", separator="\t")

Pandas 版本

import pandas as pd
# 读取文件,分隔符根据实际格式调整,空白分隔用\s+,制表符用\t
df = pd.read_csv("你的输入文件路径.txt", sep="\s+")
# 分组聚合
res = df.groupby("V1", as_index=False).agg(lambda x: "|".join(x.unique()))
# 输出
res.to_csv("你的输出文件路径.txt", sep="\t", index=False)

3. Shell awk 方案(无需额外安装环境,直接命令行运行)

awk '
NR==1 {print; next}
{
    for(i=2;i<=NF;i++){
        if(!seen[$1][i][$i]++){
            val[$1][i] = (val[$1][i] ? val[$1][i]"|" : "") $i
        }
    }
}
END{
    for(v1 in val){
        printf "%s", v1
        for(i=2;i<=NF;i++){
            printf "\t%s", val[v1][i]
        }
        print ""
    }
}
' 输入文件.txt | sort -k1,1 > 输出文件.txt

内容的提问来源于stack exchange,提问作者Abbey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:06:04