R:Dplyr:如何检查一个变量的值是否包含在另一个变量中

问题描述 投票:0回答:1

我有数百条带有“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)

但是,我不知道如何搜索每行数据都发生变化的值。

r arrays dplyr grepl
1个回答
0
投票

如果我理解正确你的问题,这里有一个解决方案应该很容易适应你的情况:

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()
© www.soinside.com 2019 - 2024. All rights reserved.