首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >字符串的R- Grep数据each,并根据每一行的搜索结果有条件地添加新值。

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

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

我有以下数据

Search dataframe

代码语言:javascript
运行
复制
     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
运行
复制
     PDB     EC         
1    1uay    2.1.1.1  
2    5ad4    4.1.3.3    

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

代码语言:javascript
运行
复制
     PDB     EC       queryResult    
1    1uay    2.1.1.1  NA
2    5ad4    4.1.3.3  found_something

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

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

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

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

代码语言:javascript
运行
复制
> 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 14:32:36

您可以使用sapply

代码语言:javascript
运行
复制
> 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 14:45:48

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

代码语言:javascript
运行
复制
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

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档