Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >字符串的R- Grep数据each,并根据每一行的搜索结果有条件地添加新值。

字符串的R- Grep数据each,并根据每一行的搜索结果有条件地添加新值。
EN

Stack Overflow用户
提问于 2018-02-14 06:22:38
回答 2查看 590关注 0票数 0

我有以下数据

Search dataframe

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     EC              name
1    2.1.1.233       helicase
2    4.1.3.3         phosphatase
3    1.3.2.1,2.5.4.1 lipase

query dataframe

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     PDB     EC         
1    1uay    2.1.1.1  
2    5ad4    4.1.3.3    

我想迭代query dataframe的所有行,在search dataframe的所有行中搜索该行中EC的值,然后如果找到一个结果,我想在query dataframe的第三列中添加一个新值。其结果应该是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     PDB     EC       queryResult    
1    1uay    2.1.1.1  NA
2    5ad4    4.1.3.3  found_something

我想我可以用一个函数和apply来完成这个任务,但是它不起作用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
f = function(x) {
  EC_no =x[1]
  ifelse(length(grep(EC_no, searchDF$EC))>0,"found",NA)
}

data$queryResult <- apply(data,1,f)

但是,像这样手动搜索是有效的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> ifelse(length(grep("4.1.3.3", searchDF$EC))>0,"found",NA)
[1] "found"

> ifelse(length(grep("0.0.0.0", searchDF$EC))>0, "found",NA)
[1] NA

我怎么才能让它在这个功能中工作呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-14 06:32:36

您可以使用sapply

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> df
               EC        name
1       2.1.1.233    helicase
2         4.1.3.3 phosphatase
3 1.3.2.1,2.5.4.1      lipase

> df2
   PDB      EC
1 1uay 2.1.1.1
2 5ad4 4.1.3.3

df2$queryResult <- sapply(df2$EC, function(x) ifelse(length(grep(x, df$EC))>0, "found", NA))

> df2
   PDB      EC queryResult
1 1uay 2.1.1.1        <NA>
2 5ad4 4.1.3.3       found
票数 2
EN

Stack Overflow用户

发布于 2018-02-14 06:45:48

编辑:,因为它不是完全匹配的-删除了前面的建议。相反,我们可以创建一个模式匹配字符串用于搜索。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
searchdf <- data.frame(EC = c("2.1.1.233", "4.1.3.3", "1.3.2.1.2.5.4.1"), names = c("helicase", "phosphatase", "lipase"))
querydf <- data.frame(PBD = c("1uay", "5ad4"), EC = c("2.1.1.1", "4.1.3.3"))

querydf$found <- ifelse(querydf$EC %in% unique(grep(paste(querydf$EC, collapse="|"), searchdf$EC, value=TRUE)), "found", NA)

querydf
   PBD      EC found
1 1uay 2.1.1.1  <NA>
2 5ad4 4.1.3.3 found
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48789450

复制
相关文章
React中利用Error Boundaries实现错误捕捉
错误边界是一种 React 组件,这种组件可以捕获发生在其子组件树任何位置的 JavaScript 错误,并打印这些错误,同时展示降级 UI,而并不会渲染那些发生崩溃的子组件树。错误边界可以捕获发生在整个子组件树的渲染期间、生命周期方法以及构造函数中的错误
henu_Newxc03
2022/05/18
7770
vue-axios-vuex-全家桶
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。简单来说就是前端最火最简单的一个http请求解决方案。
达达前端
2021/09/08
2.7K0
vue,vue-router,vuex,axios整合
*vue官网:https://cn.vuejs.org/ vue-router官网:https://router.vuejs.org/zh-cn/ vuex官网:https://vuex.vuejs.org/zh-cn/ axios中文说明:https://www.kancloud.cn/yunye/axios/234845 vue-cli建立项目 npm install -g vue-cli 全局安装vue脚手架 vue init webpack-simple project-name 使用w
conanma
2021/11/03
1.2K0
像专业人士一样捕捉 async/await 中的错误
请参考以下代码片段,我们在其中有多个 try catch 块,带有 await 功能。
前端小智@大迁世界
2023/08/16
2650
像专业人士一样捕捉 async/await 中的错误
安卓程序崩溃错误捕捉
在开发安卓程序时,本地测试没任何问题,但去到客户处不是这里麻烦就是哪里不行。最后还来个程序崩溃。。最令人头疼的就是崩溃,因为程序的崩溃总是悄然无息的,有时候根本都没办法进行复现处理,,经过一段的摸索后,总算发现安卓有个程序崩溃前的接口(CrashHandler)在崩溃前会执行,这样就能很好的捕获到错误了。
谭广健
2019/11/13
1.3K0
2.封装axios、本地存储,安装vuex、element
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 Element 一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库
RtyXmd
2018/08/30
1.4K0
2.封装axios、本地存储,安装vuex、element
axios django CSRF 403错误
使用axios直接post django的接口的时候会提示CSRF 403错误 可以在post的data中转入csrftoken 也可以给单个方法关闭 from django.views.decorators.csrf import csrf_exempt,csrf_protect @csrf_exempt def test(request): pass
小贝壳
2020/03/05
1.4K0
Vuex中的mapGetters
mapGetters([‘language’,’token‘]) 参数是个数组,数组里是你想要映射的getters里的值
全栈程序员站长
2022/07/01
5400
webgis中捕捉功能的实现
本文以openlayers为例,结合turf.js讲一下webgis中绘制和编辑时如何实现捕捉功能。
牛老师讲GIS
2021/12/06
7720
webgis中捕捉功能的实现
axios封装错误请求函数
在使用axios作为请求工具时我们通常不在catch中对错误操作进行处理,我们可以将请求错误的操作放在响应拦截器中进行,日常开发只需要在then做业务即可。
用户6256742
2022/07/06
1.2K0
JS 拦截/捕捉 全局错误 全局Error onerror
 移动Web开发过程中,在真机测试时,往往会遇到一些PC调试无法重现的问题,这时候我们需要在手机上拦截错误,并有相应的输出。 公司和网上都有类似的工具/类库,但如果纯粹一个简单的调试,或许不需要引入工具或类库,我们只需要知道全局拦截的原理。 其实很简单,就是window.onerror 语法: onerror=handleErr function handleErr(msg,url,l) { //Handle the error here return true or false } 浏览器是否显示标准的
用户1258909
2018/07/03
4.2K0
如何使用Vue.js和Axios来显示API中的数据
Vue.js是一个用于构建用户界面的前端JavaScript框架。 它的设计从头开始逐步采用,并与其他图书馆或现有项目完美集成。 这使它非常适合小型项目以及与其他工具和库一起使用的复杂单页应用程序。
子润先生
2021/06/15
8.8K0
Vuex中的核心方法
Vuex是一个专为Vue.js应用程序开发的状态管理模式,其采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。每一个Vuex应用的核心就是store仓库,store基本上就是一个容器,它包含着你的应用中大部分的状态state。
WindRunnerMax
2020/12/01
2.2K0
(五)Vuex 中的Actions
actions 和 mutations 整体上是一样的,但是actions 支持异步代码 mutations 只支持同步代码,另外 actions 不会直接修改全局状态 而是出发 mutations 来修改全局状态
老怪兽
2023/02/22
4240
Vue中的Vuex详解
        C.存储在vuex中的数据是响应式的,当数据发生改变时,页面中的数据也会同步更新
陶然同学
2023/02/27
1.4K0
Vue中的Vuex详解
uniapp 中 vuex 的使用
uniapp 内置了 vuex,不需像 vue 脚手架那样里通过 npm 安装了,我们只需要引用就行了
很酷的站长
2022/12/04
1.4K0
uniapp 中 vuex 的使用
让你的博客在QQ中以XML形式显示
1、复制下面链接,把后面域名更为成自己的 (红色区域,注意域名前面HTTPS),复制到浏览器打开 。
SingYi
2022/07/13
1.7K0
让你的博客在QQ中以XML形式显示
Vuex中的核心方法
Vuex是一个专为Vue.js应用程序开发的状态管理模式,其采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。每一个Vuex应用的核心就是store仓库,store基本上就是一个容器,它包含着你的应用中大部分的状态state。
WindRunnerMax
2020/11/30
2K0
vue中axios的封装
5. 封装post, get 请求 (此示例没有封装,可根据项目情况而定,因为封装后,对于一些特殊接口设置不是太灵活,需要我们项目没有选择封装,如果请求方法比较单一的,可以考虑封装)
用户9914333
2022/07/21
1.3K0
vue中axios的封装
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
大龄老码农-昊然
2021/05/13
3.4K0
vue中axios的封装

相似问题

Axios捕捉承诺错误

11

Vuex模块CORS中的Nuxtjs Axios错误

10

Vuex动作-返回Axios返回错误

10

如何从Vuex操作中的axios函数返回错误消息以调度catch(错误)?

29

无法捕捉axios react.js中的错误

34
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文