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

R data.table列值更新问题:如何为每行C列提取唯一值

解决方案

你的问题出在没有对每行单独处理,当前代码会把所有行的C列内容合并后再取唯一值,导致全局统一结果。以下是两种可行的data.table风格解决方法:

方法1:按行分组处理(by=.I)

# 直接修改原表的C列
mytable[, C := paste(unique(strsplit(C, ", ")[[1]]), collapse = ", "), by = .I]

# 或者生成新表
new_table <- mytable[, .(A, B, C = paste(unique(strsplit(C, ", ")[[1]]), collapse = ", ")), by = .I][, -"V1"]

by=.I表示按每一行作为一个分组,这样每行的C列会被单独拆分、去重、合并。

方法2:用sapply遍历每行数据

mytable[, C := sapply(strsplit(C, ", "), function(x) paste(unique(x), collapse = ", "))]

strsplit(C, ", ")会返回一个列表,每个元素对应一行拆分后的向量;sapply遍历这个列表,对每个行的向量去重后再合并成字符串。

注意事项

如果你的C列中逗号后可能存在不定数量的空格(比如有的是", "有的是","),可以先清理空格再拆分:

mytable[, C := sapply(strsplit(trimws(gsub(",\\s+", ",", C)), ","), function(x) paste(unique(x), collapse = ", "))]

这段代码先把所有逗号后的多空格替换成单个逗号,再去除首尾空格,最后拆分去重。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 14:06:07