r - 开始/以多列开头 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
解决方案
怎么样:
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
推荐阅读
- python-3.x - 基于 Altair 中的选择突出显示地图区域
- vim - 如何在 VsCode 中修改/更改 vimrc 文件?
- unit-testing - 单元/功能测试是否应该假设未测试的应用程序部分运行正常?
- angular - Meteor-Angular:Meteor.User 不可分配给用户类型
- sql-server - 从 SQL Server 返回参数调用 AS400 RPG
- html - 让输入按钮悬停并与输入文本融合的问题
- html - 同一个 CSS 类给了我两种不同颜色的文本
- vue.js - 如何在 Nuxt 项目中设置 NativeScript Vue 代码共享项目
- python - 使用 Python 和 Firefox 本地主机获取 Facebook 用户访问令牌
- javascript - Firebase SAML SSO 更改电子邮件地址会创建新的 Firebase 用户对象