我有一个数据表,其中包含多种血液参数(如CRP)的时间序列,跨越了数天。这个数据表很整洁,每个时间序列都在一列中,并有一个测量日的列。数据表还包含另一列感染日。如果“Day”变量大于等于“InfectionDay”,我想将每个血液参数替换为NA。由于我有很多变量,我希望编写一个接受列名的函数,并通过将“_censored”附加到原始名称来创建新的列名称。我尝试了以下代码:
censor.infection <- function(df, colname){
newcolname <- paste0(colname, "_censored")
return(df %>% mutate(!!newcolname := ifelse( Day < InfectionDay, !!colname, NA)))
}
data = tibble(Day=1:5, InfectionDay=3, CRP=c(3,2,5,4,1))
data = censor.infection(data, "CRP")
运行此代码,我期望的结果是:
# A tibble: 5 x 4
Day InfectionDay CRP CRP_censored
<int> <dbl> <dbl> <chr>
1 1 3 3 3
2 2 3 2 2
3 3 3 5 NA
4 4 3 4 NA
5 5 3 1 NA
但我得到的是
# A tibble: 5 x 4
Day InfectionDay CRP CRP_censored
<int> <dbl> <dbl> <chr>
1 1 3 3 CRP
2 2 3 2 CRP
3 3 3 5 NA
4 4 3 4 NA
5 5 3 1 NA
!!sym(variable_col_name)
起作用? - Kalaschnik