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

如何在data.table中提取相同ID行的唯一值并生成新列

解决方法:提取v1为"b"的所有唯一值并添加为新列

没问题,我来帮你搞定这个需求!咱们可以借助data.table的高效操作来实现,直接在原数据集上添加目标新列,步骤清晰又简洁。

完整实现代码

library(data.table)
a1 <- data.table(v1 = "a", v2 = "12,13,12,12,10")
a2 <- data.table(v1 = "b", v2 = "10,10,11,12")
a3 <- data.table(v1 = "b", v2 = "10,10,13,14,12")
DT <- rbindlist(list(a1, a2, a3))

# 生成包含v1="b"所有唯一值的新列
DT[, unique_b_vals := {
  # 先筛选出v1为b的所有v2字符串,合并成一个完整的逗号分隔串
  b_all_vals <- paste(v2[v1 == "b"], collapse = ",")
  # 拆分字符串为单个元素、去重、再合并回字符串
  unique_values <- unique(strsplit(b_all_vals, ",")[[1]])
  paste(unique_values, collapse = ",")
}]

# 查看最终结果
print(DT)

代码说明

  • 用data.table的:=操作符直接在原数据表中添加新列,不需要额外复制数据,效率很高;
  • 花括号内的代码块可以完成所有中间计算:先提取v1为"b"的所有v2内容,合并成一个大字符串,再拆分去重,最后重新合并成目标格式;
  • 如果想更紧凑,也可以写成一行:
DT[, unique_b_vals := paste(unique(unlist(strsplit(v2[v1 == "b"], ","))), collapse = ",")]

运行后你会得到这样的结果:

v1                v2 unique_b_vals
1:  a 12,13,12,12,10 10,11,12,13,14
2:  b    10,10,11,12 10,11,12,13,14
3:  b 10,10,13,14,12 10,11,12,13,14

所有行的unique_b_vals列都会包含v1为"b"的两行中所有的唯一值,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:54:28