在R data.table中依据另一表列名填充列的技术实现
用R data.table实现前缀列批量填充
假设我们有两个data.table:
- 第一个表
dt1,列名:a,b,c - 第二个表
dt2,列名:a_1,a_2,b_2,b_1
要把dt1中a列的数据填充到dt2所有以a_为前缀的列,b列填充到所有以b_为前缀的列,可以按以下步骤操作:
方法步骤
- 提取需要匹配的前缀:确定
dt1中需要对应到dt2的前缀列,比如这里的a和b(c列无需填充到dt2)。 - 遍历前缀批量赋值:对每个前缀,找到
dt2中对应前缀的列,再用dt1的对应列完成赋值。
示例代码
library(data.table) # 创建示例数据 dt1 <- data.table(a = 1:5, b = 6:10, c = 11:15) dt2 <- data.table(a_1 = NA, a_2 = NA, b_2 = NA, b_1 = NA) # 定义需要匹配的前缀(从dt1列名中选择) prefixes <- c("a", "b") # 批量填充数据 for(p in prefixes) { # 匹配dt2中以指定前缀+下划线开头的列名 target_cols <- grep(paste0("^", p, "_"), colnames(dt2), value = TRUE) # 批量赋值 dt2[, (target_cols) := dt1[[p]]] } # 查看填充后的结果 print(dt2)
代码说明
grep(paste0("^", p, "_"), colnames(dt2), value = TRUE):用正则表达式精准匹配dt2中目标前缀的列,避免误匹配其他相似列名。dt2[, (target_cols) := dt1[[p]]]:利用data.table的引用赋值特性,批量完成数据填充,比循环赋值效率更高。
内容的提问来源于stack exchange,提问作者user22892694
相关产品推荐
相关产品推荐

