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

为R Data Table的每个分组补充指定缺失行

解决data.table分组补充缺失val值行的问题

需求:现有一个包含多分组的data.table,需要为每个分组补充vals中存在但该分组未包含的val值对应的行,其余列填充NA。

示例代码

library(data.table)
DT = data.table(group = c(1,1,1,2,2,3,3,3,3), val = c(1,2,4,2,3,1,2,3,4), somethingElse = rep(1,9)) 
vals = data.table(val = c(1,2,3,4))

期望输出

group val somethingElse
 1:     1   1             1
 2:     1   2             1
 3:     1   3            NA
 4:     1   4             1
 5:     2   1            NA
 6:     2   2             1
 7:     2   3             1
 8:     2   4            NA
 9:     3   1             1
10:     3   2             1
11:     3   3             1
12:     3   4             1

解决方法

方法一:交叉连接+左连接

先通过CJ()生成所有group和val的组合,再与原表左连接,自动填充缺失值为NA:

# 生成所有分组与val的笛卡尔积
all_pairs <- CJ(group = unique(DT$group), val = vals$val)
# 左连接原表,匹配对应列的值
result <- all_pairs[DT, on = .(group, val), somethingElse := i.somethingElse]

方法二:分组内全连接

按group分组后,每个分组与vals做连接,保留所有val行,缺失值自动填充NA:

result <- DT[, .SD[vals, on = "val", nomatch = NA], by = group]

两种方法都能满足需求,若需要固定val的顺序,可在结果后添加order(group, val)调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:00:58