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

如何用data.table按Question_all生成记录对应Survey的found_in列

使用data.table实现按公共问题ID关联调查列表

你可以通过分组聚合+数据连接的方式快速实现需求,以下是基于data.table语法的解决方案:

完整代码

library(data.table)
# 加载原始数据
dat <- fread("Survey Question_unique Question_all
                   A               1            2
                   B               2            2
                   C               3            2
                   C               5           NA
                   A               7           NA
                   B               6            1
                   A               4            1")

# 步骤1:按公共问题ID分组,生成对应的调查列表
survey_groups <- dat[, .(found_in = paste0(sort(unique(Survey)), collapse = ", ")), by = Question_all]

# 步骤2:将分组结果合并回原始数据
dat <- dat[survey_groups, on = "Question_all"]

# 步骤3:处理公共ID为NA的行,将found_in设为NA
dat[is.na(Question_all), found_in := NA_character_]

# 查看最终结果
print(dat)

代码说明

  1. 分组聚合:通过by = Question_all分组,用unique(Survey)去重每个公共ID对应的调查,sort()保证结果按字母顺序排列(和你给出的示例输出一致),最后用paste0(..., collapse = ", ")将多个调查合并为逗号分隔的字符串。
  2. 数据连接:利用data.table的on = "Question_all"实现匹配连接,让每一行都关联到所属公共ID的调查列表。
  3. NA值处理:针对原始数据中Question_all为NA的行,手动将found_in设为NA,符合示例要求。

运行后输出将完全匹配你期望的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:40:27