如何解决根据所有其他字符列中的行字符串检测来改变条件列
想象一下我有一个简单的小标题:
tribble(~a,~b,~c,1,"def","abc",2,"def")
我想使用以字符串是否存在于所有其他列中为条件的值来改变新列“d”。在这种情况下,我正在寻找字符串“abc”。最终输出将如下所示:
tribble(~a,~d,"present","absent")
实际上,我的 tibble 有大约 20 列,其中可能有 10 列是字符,而我要查找的字符串更复杂,例如 "[Aa]|[Cc]"
。我确信 pmap、case_when 和 str_detect 有一个简单的方法,但根本无法解决!
解决方法
在基础 R 中使用 rowSums
:
cols <- sapply(df,is.character)
df$d <- ifelse(rowSums(sapply(df[cols],grepl,pattern = 'a')) > 0,'present','absent')
使用 dplyr
,我们可以将 rowwise
与 c_across
一起使用:
library(dplyr)
library(stringr)
df %>%
rowwise() %>%
mutate(d = if(any(str_detect(c_across(where(is.character)),'a')))
'present' else 'absent')
# a b c d
# <dbl> <chr> <chr> <chr>
#1 1 def abc present
#2 2 def def absent
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。