在R中查找数据表中的字符串列表

在R中查找数据表中的字符串列表,r,string,search,data.table,R,String,Search,Data.table,我有一个字符串向量(候选字符串),我希望在数据表(FBgn_Dmels)中查找每个字符串,如果在一行中找到匹配项,则返回第一列条目(例如,CG2175应返回“1-Dec”) 我可以通过在数据帧上使用循环来解决这个问题,但它看起来相当缓慢和低效。我想知道是否有一种直接的方法来处理数据表 非常感谢您提出如何解决此问题的建议 -Geo相当老套,但似乎很管用。我假设您的数据称为FBgn_Dmels: candidates <- c("CG2175", "CG31196", "CG3169", "C

我有一个字符串向量(候选字符串),我希望在数据表(FBgn_Dmels)中查找每个字符串,如果在一行中找到匹配项,则返回第一列条目(例如,CG2175应返回“1-Dec”)

我可以通过在数据帧上使用循环来解决这个问题,但它看起来相当缓慢和低效。我想知道是否有一种直接的方法来处理数据表

非常感谢您提出如何解决此问题的建议


-Geo相当老套,但似乎很管用。我假设您的数据称为FBgn_Dmels:

candidates <- c("CG2175", "CG31196", "CG3169", "CG15168", "CG2252", "CG2019")
getthem <- function(string){
  string <- paste0("^",string,"$")
  as.character(FBgn_Dmels[which(apply(FBgn_Dmels, 2, function(x) grepl(string, x, perl=TRUE)), arr.ind = TRUE)[1], "V1_01"][1])
}

候选者相当老练,但似乎有效。我假设您的数据称为FBgn_Dmels:

candidates <- c("CG2175", "CG31196", "CG3169", "CG15168", "CG2252", "CG2019")
getthem <- function(string){
  string <- paste0("^",string,"$")
  as.character(FBgn_Dmels[which(apply(FBgn_Dmels, 2, function(x) grepl(string, x, perl=TRUE)), arr.ind = TRUE)[1], "V1_01"][1])
}

应聘者您可以添加来自
dput(head(FBgn\u Dmels))
的结果并显示您想要的结果吗。匹配项应将第一列中的条目作为表格或列表返回。“12月1日”;“CG2175”“zye”;“CG5847”您能添加来自
dput(head(FBgn\u Dmels))的结果吗?
并显示您想要的结果吗。匹配项应将第一列中的条目作为表格或列表返回。“12月1日”;“CG2175”“zye”;“CG5847”我必须将“j”设置为列名,以便显示第一列的值:(
as.character(FBgn\u Dmels[which(apply(FBgn\u Dmels,2,function(x)grepl(string,x,fixed=TRUE)),arr.ind=TRUE)[1],V1\u 01][1])
。唯一剩下的问题是它只返回精确匹配项(此代码与CG3196和CG31960匹配,尽管
fixed=TRUE
)现在试试看:我已将字符串更改为^string$(和$是开始和结束,因此不应与其他字符串匹配)我必须将“j”设置为列名,以便将第一列的值显示为:(
as.character(FBgn_Dmels)[which(apply(FBgn_Dmels,2,function(x))grepl(string,x,fixed=TRUE)),arr.ind=TRUE)[1],V1_01][1])
。唯一剩下的问题是它不会只返回完全匹配的结果(此代码匹配CG3196到CG31960,尽管
fixed=TRUE
)好的,现在试试看:我已经将字符串更改为^string$(和$是开始和结束,所以它不应该匹配其他字符串)