gpt4 book ai didi

r - Str_detect 多列使用跨

转载 作者:行者123 更新时间:2023-12-05 01:11:22 34 4
gpt4 key购买 nike

我想使用 across 根据跨多个列的 str_detect 结果创建一个新列。

例如,在下面的测试数据中,我想在以“job”开头的列中搜索“No job”,然后如果在任何列中检测到该字符串则返回 1,否则返回 0不是。

test_data <-  data.frame("job1" = c('Sales','Baker','Blacksmith','Brewer'), 
"job2" = c('Mailman','Jockey','Jobhunter',"No job"),
"id" = c("id_1", "id_2", "id_3", "id_4"))

# Output I'd like:

# job1 job2 id no_job
#1 Sales Mailman id_1 0
#2 Baker Jockey id_2 0
#3 Blacksmith Jobhunter id_3 0
#4 Brewer No job id_4 1

我知道我可以合并以“job”开头的列,然后像这样在新列上使用str_detect:

test_data2 <- test_data %>%
unite(col = "all_jobs", starts_with("job"), sep = ", ", remove = FALSE) %>%
mutate(no_job = if_else(str_detect(all_jobs, "No job"), 1, 0))

...但我想知道是否有办法使用 across 来做同样的事情。我已经尝试了以下内容的变体,但还没有成功。

test_data2 <- test_data %>%
mutate(no_job = if_else(across(starts_with("job"), str_detect(., "No job")), 1, 0))

最佳答案

一个选项可能是:

test_data %>%
rowwise() %>%
mutate(no_job = +any(str_detect(c_across(-id), "No job")))

job1 job2 id no_job
<fct> <fct> <fct> <int>
1 Sales Mailman id_1 0
2 Baker Jockey id_2 0
3 Blacksmith Jobhunter id_3 0
4 Brewer No job id_4 1

关于r - Str_detect 多列使用跨,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63399181/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com