我试图按年份来计算某个特定类型癌症的风险人群,我有一个data.table
,它包含了患者是否患有cancer
(1/0)的信息,以及他们的癌症被发现的日期cancerDate
,我的数据跨度为2015年到2021年。
我已经为此编写了一个函数:
add_par_column <- function(dt, year) {
dt[, `:=`(PAR = cancer == 0 | (cancer == 1 & cancerDate >= paste0(year, "-01-01")))]
}
然后像这样实现函数:
DT <- add_par_column(DT, 2015)
DT <- add_par_column(DT, 2016)
DT <- add_par_column(DT, 2017)
#etc.
问题是,我的函数创建的变量PAR
会被我运行的year
的每一个新行覆盖,而不是在data.table
中单独保存每年的PAR。
我尝试过通过向PAR
变量添加前缀来编辑函数,如下所示:
add_par_column <- function(dt, year) {
dt[, `:=`(
paste0("PAR", year) = cancer == 0 | (cancer == 1 & cancerDate >= paste0(year, "-01-01"))
)]
}
但我一直收到错误消息。
如果我不使用这个函数,我应该在data.table
中创建这些新的PAR
变量:
DT <- DT[,
`:=`(
PAR2015 = cancer == 0 |(cancer == 1 & cancerDate >= "2015-01-01"),
PAR2016 = cancer == 0 |(cancer == 1 & cancerDate >= "2016-01-01"),
PAR2017 = cancer == 0 |(cancer == 1 & cancerDate >= "2017-01-01"),
PAR2018 = cancer == 0 |(cancer == 1 & cancerDate >= "2018-01-01"),
PAR2019 = cancer == 0 |(cancer == 1 & cancerDate >= "2019-01-01"),
PAR2020 = cancer == 0 |(cancer == 1 & cancerDate >= "2020-01-01")
PAR2021 = cancer == 0 |(cancer == 1 & cancerDate >= "2021-01-01")
)]
但我尽量避免重复。
2条答案
按热度按时间alen0pnh1#
如果我们希望保留
PAR
以保留原始数据并进行更新,则使用已创建的PAR
列创建OR(|
)条件数据
6tdlim6h2#
您可以使用
LHS:=RHS
引用语义来代替函数形式``:=(LHS=RHS)
。我不记得看到函数形式与计算
LHS
,你得到的错误消息表明这是不允许的。