gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:51:43 24 4
gpt4 key购买 nike

我有一个看起来像 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/

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