我有数百条带有“state_name”(阿拉斯加、阿拉巴马等)的记录,需要确定 state_name 的值是否包含在另一个变量“jurisdiction_name”中的任何位置。我知道如何在字符串中搜索单个值,例如“阿拉巴马”使用类似:
mutate(type_state=ifelse(grepl("Alabama",jurisd_name),1,0)) %>%
如何搜索每行以确定州名称(每行不同)是否包含在管辖名称中?换句话说,我正在搜索 state_name 的变化值,而不是单个状态。
有没有办法做这样的事情:
df2 <- df %>%
mutate(state_val=get(state_name))%>%
mutate(type_state=ifelse(grepl(state_val,jurisd_name),1,0))
显然,这段代码不起作用,因为 grepl 需要一个字符串模式,例如grepl(“阿拉巴马州”,jurisdiction_name)
但是,我不知道如何搜索每行数据都发生变化的值。
如果我理解正确你的问题,这里有一个解决方案应该很容易适应你的情况:
df <- tibble::tibble(a = month.name, b = c(letters[1:6], letters[1:6]))
df |>
dplyr::mutate(check = stringr::str_detect(string = a, pattern = b))
#> # A tibble: 12 × 3
#> a b check
#> <chr> <chr> <lgl>
#> 1 January a TRUE
#> 2 February b TRUE
#> 3 March c TRUE
#> 4 April d FALSE
#> 5 May e FALSE
#> 6 June f FALSE
#> 7 July a FALSE
#> 8 August b FALSE
#> 9 September c FALSE
#> 10 October d FALSE
#> 11 November e TRUE
#> 12 December f FALSE
创建于 2023-05-14 与 reprex v2.0.2
基本上,如果我正确理解了您要实现的目标,您可能只需要将
a
替换为 state_val
并将 b
替换为 'jurisd_name`。
如果你想使用
grepl
,你可以通过分组,并反转参数的顺序来实现:
df |>
dplyr::group_by(a, b) |>
dplyr::mutate(check = grepl(b, a)) |>
dplyr::ungroup()