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
相关产品推荐
相关产品推荐

