我有一个字符列,其中包含单个字符串中的电子邮件地址(以逗号分隔)。 我还有另一个字符列也包含此类电子邮件地址。
我现在想要拆分第一列中的字符串(即创建电子邮件地址向量),然后检查其中是否有任何一个出现在第二列中。
我认为这对于
stringr
函数来说是一项简单的任务,但似乎它们并没有以我想象的方式进行矢量化。
我知道如何通过其他解决方法(例如分离更长的时间等)来完成我的任务,但我对一次调用而不重塑任何东西感兴趣。
数据:
df <- structure(list(a = c("[email protected], [email protected]", "[email protected], [email protected]"),
b = c("[email protected], [email protected]", "[email protected], [email protected]")),
class = "data.frame",
row.names = c(NA, -2L))
我的代码:
df |>
mutate(test = any(str_detect(a, str_split_1(b, ", "))))
Error in `mutate()`:
ℹ In argument: `test = any(str_detect(a, str_split_1(b, ", ")))`.
Caused by error in `str_split_1()`:
! `string` must be a single string, not a character vector.
Run `rlang::last_trace()` to see where the error occurred.
看起来
str_split_1
无法识别每行的单个字符串,而是采用整列的字符向量。
预期输出:
a b test
1 [email protected], [email protected] [email protected], [email protected] TRUE
2 [email protected], [email protected] [email protected], [email protected] FALSE
你可以这样做:
df %>%
mutate(test = map_lgl(.x = str_split(b, ", "), ~ any(str_detect(a, .x))))
a b test
1 [email protected], [email protected] [email protected], [email protected] TRUE
2 [email protected], [email protected] [email protected], [email protected] FALSE