首页 > 解决方案 > 带有管道的 if 语句

问题描述

我看过一些关于如何使用 if 语句或使用管道的条件的文章,但我不确定如何将其应用于我的情况。除了对我的问题的具体答案外,我还希望对添加带有管道的 if 语句进行更一般的解释,以便我能够处理大多数情况。

我试图学习在下面使用这个答案(使用 if() 在 dplyr 管道链中使用 select()),但我不明白我们为什么要提供“。” 作为下面第三行的论点以及我应该何时这样做

  mtcars %>% 
  group_by(cyl) %>% 
  { if (cond) filter(., am == 1) else . } %>% 
  summarise(m = mean(wt))

这是我的数据示例:

df_parse<-

    structure(list(value = c("HURESPLI\t2\tLINE NUMBER OF THE RESPONDENT\tCURRENT\t22 - 23", 
                             "FILLER\t2\t\t27 - 28", "HUBUSL1\t2\tENTER LINE NUMBER\t81 - 82", 
                             "GEDIV\t1\tDIVISION\t91 - 91", "GESTFIPS\t2\tFEDERAL INFORMATION\t93 - 94"
    ), starts_with_position = c(TRUE, TRUE, TRUE, TRUE, TRUE), missing_vars = c("HUFINAL\t FINAL OUTCOME CODE\t 24 - 26", 
                                                                                "HETENURE\t ARE YOUR LIVING QUARTERS... (READ ANSWER CATEGORIES)\t 29 - 30", 
                                                                                "FOR HUBUS = 1 VALID ENTRIES  83 - 84", "  92 - 92", "  95 - 95"
    )), row.names = c(NA, 5L), class = "data.frame")

我正在尝试使用 extract (tidyr) 和 gsub 分离 missing_vars 列,如下所示:

df_parse<-
df_parse %>%
  mutate(dup_value2 = missing_vars) %>% 
  extract(col = dup_value2, into = "position2", regex = "(\\d+\\s*-\\s*\\d+)$") %>%
  mutate(id2 = gsub(pattern = "\\t.*", replacement = "", x = missing_vars)) %>% 
  mutate(desc2 = gsub(".*\\\t\\d+\\\t", replacement = "", x = missing_vars)) %>%  
  mutate(desc2 = gsub("(\\d+\\s*-\\s*\\d+)$", replacement = "", x = missing_vars))

这工作正常,但我想在这个管道的开头添加一个条件,其中 df_parse$starts_with_position == TRUE

像这样的东西?(我知道它不起作用)

df_parse %>% if(starts_with_position==TRUE){
  mutate(dup_value2 = missing_vars) %>% 
    extract(col = dup_value2, into = "position2", regex = "(\\d+\\s*-\\s*\\d+)$") %>%
    mutate(id2 = gsub(pattern = "\\t.*", replacement = "", x = missing_vars)) %>%
    mutate(desc2 = gsub(".*\\\t\\d+\\\t", replacement = "", x = missing_vars)) %>%  
    mutate(desc2 = gsub("(\\d+\\s*-\\s*\\d+)$", replacement = "", x = missing_vars))
}else ""
  

标签: rpipetidyr

解决方案


推荐阅读