gpt4 book ai didi

r - dplyr - 使用可变列名称进行变异

转载 作者:行者123 更新时间:2023-12-02 00:15:54 25 4
gpt4 key购买 nike

我有一个 tibble,其中包含几天内 CRP 等各种血液参数的时间序列。 tibble 很整洁,每个时间序列都在一列中,还有一列用于测量日期。 tibble 包含另一列感染日期。如果日变量大于感染日,我想用 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

最佳答案

你可以在 mutate 中的列名中添加 sym() 以在计算之前转换为符号

censor.infection <- function(df, colname){
newcolname <- paste0(colname, "_censored")
return(df %>% mutate(!!newcolname := ifelse( Day < InfectionDay, !! sym(colname), NA)))
}

data = tibble(Day=1:5, InfectionDay=3, CRP=c(3,2,5,4,1))
data = censor.infection(data, "CRP")

关于r - dplyr - 使用可变列名称进行变异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56984824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com