r - 在 dplyr 的特定列范围内使用 mutate case_when()

标签 r dplyr tidyverse tidyr

我有一个看起来像 df1 的大型数据框。 如果任何字符包含字符串 S,我想在 col2:col4 (col2,col3,col4) 之间的列范围内搜索。

library(tidyverse)

df <- tibble(position=c(100,200,300),
             correction=c("62M89S", 
                          "8M1D55M88S",
                          "1S25M1S36M89S"))

df1 <- df %>% 
  separate(correction, into = str_c("col", 1:5), 
           sep = "(?<=\\D)(?=\\d)", fill = "left", remove = FALSE)

df1
#> # A tibble: 3 × 7
#>   position correction    col1  col2  col3  col4  col5 
#>      <dbl> <chr>         <chr> <chr> <chr> <chr> <chr>
#> 1      100 62M89S        <NA>  <NA>  <NA>  62M   89S  
#> 2      200 8M1D55M88S    <NA>  8M    1D    55M   88S  
#> 3      300 1S25M1S36M89S 1S    25M   1S    36M   89S

reprex package 于 2022-03-12 创建(v2.0.1)

我希望我的数据看起来像这样

df1
#>   position correction    col1  col2  col3  col4  col5     inner_S
#>      <dbl> <chr>         <chr> <chr> <chr> <chr> <chr>      
#> 1      100 62M89S        <NA>  <NA>  <NA>  62M   89S         NO 
#> 2      200 8M1D55M88S    <NA>  8M    1D    55M   88S         NO
#> 3      300 1S25M1S36M89S 1S    25M   1S    36M   89S         YES

因为col3中有1S这个字符。

我试过这个,但我确定我违反了一些属性

df1 %>% 
  mutate_at(vars(col2:col4),
                             ~inner_S=case_when(grepl("S",.) ~ "Yes", 
                              TRUE ~ "No"
                            ))

最佳答案

dplyrc_across 对于这样的操作非常方便:

df1 %>% 
  rowwise() %>% 
  mutate(inner_S = ifelse(any(grepl('S', c_across(col1:col4))), 'YES', 'NO'))

  position correction    col1  col2  col3  col4  col5  inner_S
     <dbl> <chr>         <chr> <chr> <chr> <chr> <chr> <chr>  
1      100 62M89S        NA    NA    NA    62M   89S   NO     
2      200 8M1D55M88S    NA    8M    1D    55M   88S   NO     
3      300 1S25M1S36M89S 1S    25M   1S    36M   89S   YES    

关于r - 在 dplyr 的特定列范围内使用 mutate case_when(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71445635/

相关文章:

r - 按组查找特定日期上下最接近的值

r - 为 r 中的每个变量按组汇总表中的数据

r - 为什么即使添加 add ='mean_se' 后,误差线也不会显示在 ggpubr::ggbarplot 中

r - Tidyverse 按行绑定(bind)未命名向量列表的方法 - do.call(rbind,x) 等效

r - 计算 R 中每行文本数据的 ngram

python - 如何将 geom_hlines 图例添加到plotnine 的图中?

r - 具有不同分母 R 的除法的累积和

r - 列表列上的 purrr pmap 和几个向量

r - Basic R - 输出基本 R 相关表 -> LaTex 或文本

r - 对于 unicode 变量字符(希腊语),knitr 生成的源代码中没有定界空格