我从一个简单的例子开始,但我不知道如何在 dplyr mutate 中使用
这有效,我得到了“bcd-234”:
library(tidyverse)
list = c("abc-123", 'bcd-234', 'cde-345', 'bcd-987')
s = 'bcd'
list[str_detect(list, s)][1]
但是当我尝试在 dplyr mutate 中使用它时出现错误:
df <- tibble(
name = c('aaa', 'bbb', 'ccc', 'ddd', 'abc', 'bcd', 'cde')
)
df |> mutate(
new_name = if_else(any(str_detect(list, name)), list[str_detect(list, name)][1], name)
)
我收到一个错误:
! Can't recycle `string` (size 4) to match `pattern` (size 7).
谢谢
PS. 避免使用列表作为变量名。
不幸的是,base
R
的match()
,以及这里更相关的charmatch()
,无法处理多个匹配。我们可以使用
replace
++和 ++ on%in%
来避免。substr
sapply
toString
grepv
i
dplyr::rowwise
注意。这是 2025 年 4 月 11 日发布的How About a Twenty-Six
grepv()
中引入的新功能。它“除了默认设置外,其他功能完全相同”,请参阅新闻。(现在已在 SO 上发布广告。)R 4.5.0
grep()
value=TRUE
R
数据
OP 的数据命名更恰当。
在基础 R 中,我们可以使用
startsWith
,outer
将名称与相应的字符串replace
匹配;给出结果。diag()
在哪里
如果您需要
"list"
专栏,我们稍微调整一下:在哪里
数据: