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

R语言按优先级合并data.table的lab1、lab2列生成lab3的实现方法

你提到的dplyr::coalesce函数实际可以实现该需求,该函数的优先级按照入参顺序从左到右递减,你之前没有得到预期结果大概率是把lab1放在了lab2前面,调整参数顺序即可。以下是两种常用实现方案:

方案1:data.table原生实现(性能最优,无需额外加载其他包)

使用data.table自带的高效条件判断函数fifelse实现:

library(data.table)

# 构造示例数据
dt <- data.table(
  lab1 = c(5, 8, NA, 9, NA),
  lab2 = c(7, 10, 3, NA, NA)
)

# 生成lab3列
dt[, lab3 := fifelse(!is.na(lab2), lab2, lab1)]

方案2:使用dplyr的coalesce实现

将优先级更高的lab2放在第一个参数位置即可:

library(data.table)
library(dplyr)

dt <- data.table(
  lab1 = c(5, 8, NA, 9, NA),
  lab2 = c(7, 10, 3, NA, NA)
)

dt[, lab3 := coalesce(lab2, lab1)]

两种方案运行后得到的结果均符合要求:

> dt
   lab1 lab2 lab3
1:    5    7    7
2:    8   10   10
3:   NA    3    3
4:    9   NA    9
5:   NA   NA   NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:48:04