如何根据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
相关产品推荐
相关产品推荐

