首页 > 解决方案 > 开始/以多列开头 grepl/paste0

问题描述

编辑:我稍微改变了这个问题。

我想检查 AP 或 OP 是否以 S 中的字符串开头。如果是,则 mut=1。

DF2<-data.frame(id=c(1,2,3,4,5),AP=c("A1056B","B21056C","C356A","C4BA","D4"),OP=c("AA","BB","AAKLM","DDA","C4AAB"))

  id     AP      OP
  1  A1056B       AA
  2 B21056C       BB
  3   C356A    AAKLM
  4    C4BA      DDA
  5      D4    C4AAB

S<-c("A1","C4")

期望的输出:

   id      AP    OP mut
1  1  A1056B     AA   1
2  2 B21056C     BB   0
3  3   C356A  AAKLM   0
4  4    C4BA    DDA   1
5  5      D4  C4AAB   1

我试过了:

DF2%>%mutate(mut=case_when(grepl(paste0(S, collapse"|"),AP|OP)~1,TRUE~0))

但无法弄清楚如何声明要在其中搜索的多个列。

有任何想法吗?

最佳 H

标签: r

解决方案


怎么样:

library(dplyr)
DF2 %>% mutate(mut = as.numeric(substring(AP,1,1) %in% S | substring(OP,1,1) %in% S))

  id AP OP mut
1  1 A1 AA   1
2  2 B2 BB   0
3  3 C3 AA   1
4  4 C4 DD   1
5  5 D4 CC   1

推荐阅读