生成引用现有变量的动态变量

Lou*_*den 5 r dplyr purrr tidyverse tidyeval

我正在尝试生成具有重要恒星的相关矩阵。采取以下数据框:

df <- tibble(stub = c(1,2,3,4),
             stub_pvalue = c(.00, .04, .07,.2))
Run Code Online (Sandbox Code Playgroud)

我想编写一个函数,如果stub_pvalue小于.01,则粘贴任何与“ ***”连接的列(例如本例中的stub),否则直接粘贴stub。就像是:

assign_stars <- function(var) {

    if (paste0(var,"_pvalue") < .01) {
      paste0(var, "***")
    } else {
      paste0(var)
    }

}

df %>% 
  mutate(col_with_stars = map_chr(col, assign_stars))
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何在var +“ _pvalue”上评估if的第一个逻辑条件。有人可以帮忙吗?

Chu*_*uan 1

您可能过度思考了这个问题,ifelse即矢量化函数,您可以使用它来执行动态更改。

df <- tibble(stub1 = c(1,2,3,4),
             stub1_pvalue = c(.00, .04, .07,.2),
             stub2 = c(1,2,3,4),
             stub2_pvalue = c(.00,.00,.02,.2))


for(x in paste0("stub",seq(1:2))){
 df[[paste0(x,"_with_star")]] <- ifelse(df[[paste0(x,"_pvalue")]]< .01, paste0(df[[x]],"***"),df[[x]])
}

df

# A tibble: 4 x 6
  stub1 stub1_pvalue stub2 stub2_pvalue stub1_with_star stub2_with_star
  <dbl>        <dbl> <dbl>        <dbl> <chr>           <chr>          
1     1         0        1         0    1***            1***           
2     2         0.04     2         0    2               2***           
3     3         0.07     3         0.02 3               3              
4     4         0.2      4         0.2  4               4         
Run Code Online (Sandbox Code Playgroud)