我可以使用 case_when (或其他任何东西)来编写非静态字符串吗?
Can I use case_when (or anything else) to write with a non-static string?
我在 R 中有一个数据框。作为对我最初的正则表达式的测试,我目前正在出色地工作。作为参考,我安装了 dplyr
和 magrittr
,主要是出于其他原因,就空格和右括号而言,我遵循一些项目范围的约定:
frame %<>% mutate(
columnA = case_when(
grepl("WXYZ *[1-9]{1,2}", columnB) == TRUE ~'HOORAY'
)
)
问题是,我想用实际找到的 grepl
替换 'HOORAY'。现在,我当然正在搜索包含 WXYZ 后跟任意数量的空格(包括 0)然后是一位或两位整数的字符串。
例如,如果 grepl
找到字符串“WXYZ 22”,我希望将 columnA 中的相应条目写为“WXYZ 22”。但是如果它以后找到“WXYZ5”,我希望它在自己对应的条目中写上“WXYZ5”。
我想要,在伪代码中TRUE ~ <what grepl found>
。
我可以用 case_when
做这个吗?如果可以,有没有更好的办法?
如果 case_when
结构是必需的,这个使用 stringr
的解决方案有效:
grepl("WXYZ *[1-9]{1,2}", columnB) ~ str_extract(columnB, "WXYZ *[1-9]{1,2}")
根据更大的问题设置,您也可以这样做:
mutate(columnA = str_extract(columnB, "WXYZ *[1-9]{1,2}"))
请注意,对于无法匹配的情况,columnA 将是 NA
。另请注意,虽然 grep
首先需要模式,然后是目标字符串,但 stringr
函数需要相反的结果。
我在 R 中有一个数据框。作为对我最初的正则表达式的测试,我目前正在出色地工作。作为参考,我安装了 dplyr
和 magrittr
,主要是出于其他原因,就空格和右括号而言,我遵循一些项目范围的约定:
frame %<>% mutate(
columnA = case_when(
grepl("WXYZ *[1-9]{1,2}", columnB) == TRUE ~'HOORAY'
)
)
问题是,我想用实际找到的 grepl
替换 'HOORAY'。现在,我当然正在搜索包含 WXYZ 后跟任意数量的空格(包括 0)然后是一位或两位整数的字符串。
例如,如果 grepl
找到字符串“WXYZ 22”,我希望将 columnA 中的相应条目写为“WXYZ 22”。但是如果它以后找到“WXYZ5”,我希望它在自己对应的条目中写上“WXYZ5”。
我想要,在伪代码中TRUE ~ <what grepl found>
。
我可以用 case_when
做这个吗?如果可以,有没有更好的办法?
如果 case_when
结构是必需的,这个使用 stringr
的解决方案有效:
grepl("WXYZ *[1-9]{1,2}", columnB) ~ str_extract(columnB, "WXYZ *[1-9]{1,2}")
根据更大的问题设置,您也可以这样做:
mutate(columnA = str_extract(columnB, "WXYZ *[1-9]{1,2}"))
请注意,对于无法匹配的情况,columnA 将是 NA
。另请注意,虽然 grep
首先需要模式,然后是目标字符串,但 stringr
函数需要相反的结果。