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

使用data.table为分组缺失的Variable_codes_2022生成递增编码

解决思路与代码实现

核心逻辑

按Survey分组,提取每组已存在编码的数字部分,找到最大值后,给该组的NA行分配从最大值+1开始的递增编码,拼接对应分组的前缀字符即可。

具体代码

library(data.table)
dat <- fread("Survey Variable_codes_2022
              D       D1
              A       A1
              B       B1
              B       B3
              B       B2
              E       E1
              B       NA
              E       NA")

# 按Survey分组填充NA编码
dat[, {
  # 提取现有非NA编码的数字部分并转成整数
  existing_digits <- as.integer(gsub("[^0-9]", "", Variable_codes_2022[!is.na(Variable_codes_2022)]))
  # 确定当前组的最大数字(无现有编码时默认0)
  max_digit <- if (length(existing_digits) == 0) 0 else max(existing_digits)
  # 定位NA行并生成新编码
  na_pos <- which(is.na(Variable_codes_2022))
  if (length(na_pos) > 0) {
    new_codes <- paste0(Survey[1], max_digit + seq_along(na_pos))
    Variable_codes_2022[na_pos] <- new_codes
  }
  .SD
}, by = Survey]

代码说明

  1. 分组处理:通过by = Survey确保每个分组独立计算,不会互相干扰
  2. 提取数字:用gsub("[^0-9]", "", ...)过滤掉编码中的非数字字符,再转成整数类型,不管原编码数字的排列顺序,只取最大值作为起始点
  3. 生成新编码:对每组的NA行,按顺序生成最大值+1、最大值+2...的数字,拼接分组前缀(如B、E)后替换NA值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:12:26