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

如何在data.table中按条件高效替换缺失的description值?

在data.table中高效替换缺失描述值的方案

核心逻辑

按id分组,将空字符串的description替换为当前id下日期最新的非空description;若当前id无任何非空description,则保留空值。

示例数据转换

先将你提供的data.frame转为data.table:

library(data.table)
set.seed(3)
dt <- as.data.table(
  data.frame(
    seqs = 1:11 ,
    id = c(1,1,1,2,3,3,4,4,4,4,5) ,
    description = c("Red","Red","","","Blue","Blue","Red","Red","","Red","Blue"),
    dates = sample(2000:2020, 11, TRUE)
  )
)

高效替换代码

直接通过data.table分组操作完成替换,无需额外映射表,内存效率适配百万级数据:

dt[, {
  # 获取当前id下最新的非空描述值,无则为空字符串
  latest_desc <- if (any(description != "")) {
    .SD[description != "", .SD[which.max(dates)]$description]
  } else {
    ""
  }
  # 替换空描述
  description := fifelse(description == "", latest_desc, description)
}, by = id]

结果验证

  • seqs=3(id=1):替换为同id下最新非空的"Red"
  • seqs=4(id=2):因同id无其他非空值,保留空字符串
  • seqs=9(id=4):替换为同id下最新非空的"Red"

性能说明

该方案完全基于data.table的原生分组机制,避免了不必要的数据复制或转换,内存占用低,处理百万级数据集时效率远高于循环或非data.table方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:40:38