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

如何在R函数中为data.table创建带指定前缀的新变量

解决方法

问题原因

你之前的函数报错,是因为data.table的:=操作符左侧不能直接用paste0这类生成列名的表达式,必须把动态生成的列名放在括号()里,或者通过命名列表的方式传递。

方法1:修改函数,动态生成列名

调整函数,先构造列名字符串,再用括号包裹作为:=的左侧,这样就能生成带年份后缀的PAR列,不会被覆盖:

add_par_column <- function(dt, year) {
  col_name <- paste0("PAR", year)
  # 用括号包裹列名字符串,告诉data.table这是要创建的列名
  dt[, (col_name) := cancer == 0 | (cancer == 1 & cancerDate >= paste0(year, "-01-01"))]
  return(dt)
}

# 循环调用处理所有年份
years <- 2015:2021
for(y in years) {
  DT <- add_par_column(DT, y)
}

方法2:一次性生成所有列(更高效,避免重复代码)

不用循环调用函数,直接批量构建所有需要的PAR列,这是data.table推荐的高效写法:

years <- 2015:2021

# 构建每个年份对应的表达式和列名
par_cols <- lapply(years, function(y) {
  # 构造判断条件的表达式,转成Date类型更严谨
  cond_expr <- substitute(
    cancer == 0 | (cancer == 1 & cancerDate >= start_date),
    list(start_date = as.Date(paste0(y, "-01-01")))
  )
  # 为表达式设置对应的列名
  setNames(list(cond_expr), paste0("PAR", y))
})

# 将列表合并为一个命名列表,一次性添加所有列
DT[, c(names(unlist(par_cols))) := unlist(par_cols, recursive = FALSE)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:35:26