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

如何根据Type列将data.table按行值与列名关联并嵌套子表?

解决方案

步骤1:从DT_2中提取对应Type的子表集合

先把DT_2中按Type前缀分组的子表提取出来,做成以Type为名称的列表,方便后续匹配:

library(data.table)

# 定义原始数据
DT_1 <- data.table(Type = c("A1","B1","A1","B1"))
DT_2 <- data.table(A1 = c(1,2,3),A1_ref = c(4,5,6),
                   B1 = c(11,12,13,14),B1_ref = c(15,16,17,18))

# 获取所有需要匹配的Type值
target_types <- unique(DT_1$Type)

# 生成每个Type对应的子表列表
ref_table_list <- lapply(target_types, function(type) {
  # 筛选DT_2中以当前Type开头的列
  DT_2[, grep(paste0("^", type), colnames(DT_2)), with = FALSE]
})
# 给列表命名,对应Type值,方便后续按Type匹配
names(ref_table_list) <- target_types

步骤2:给DT_1新增嵌套子表列

直接通过Type列匹配列表中的子表,赋值到新增的Ref_table列:

DT_1[, Ref_table := ref_table_list[Type]]

验证结果

运行后DT_1的结构如下:

> DT_1
   Type       Ref_table
1:   A1 <data.table[3x2]>
2:   B1 <data.table[4x2]>
3:   A1 <data.table[3x2]>
4:   B1 <data.table[4x2]>

查看具体子表内容:

  • 第1、3行的Ref_table就是DT_2[, .(A1, A1_ref)],即你提到的DT_3
  • 第2、4行的Ref_table就是DT_2[, .(B1, B1_ref)](注:你给出的DT_4示例数据有误,实际是DT_2中B1相关列的原始值)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:31:04