У меня есть тиббл, содержащий временные ряды различных показателей крови, таких как СРБ, в течение нескольких дней. Столбик аккуратный, с каждым временным рядом в одном столбце, а также столбцом для дня измерения. Тиббл содержит еще одну колонку с указанием дня заражения. Я хочу заменить каждый параметр крови на NA, если переменная Day больше или равна InfectionDay. Поскольку у меня много переменных, я хотел бы иметь функцию, которая динамически принимает имя столбца и создает новое имя столбца, добавляя «_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