【发布时间】:2017-03-06 12:04:31
【问题描述】:
我有两个数据框,SCR 和SpecificSpecies。 SCR中的项目名称部分包含Specific Species中列出的物种。
SpecificSpecies$Species
S cerevisiae
Daucus carota
SCR$MESH_HEADINGS
tetracycline CMT-3
zrg17 protein, S cerevisiae
EP4 glycoprotein, Daucus carota
我正在尝试获取仅包含那些没有任何匹配物种的条目的 SCR 子集。在上述情况下,该列表将只是
tetracycline CMT-3.
我学会这样做的方法是使用嵌套循环,将 SCR 中的每个条目与 SpecificSpecies 中的每个条目进行比较。当没有找到匹配项时,将 SCR 的行追加到新表中:
For each row in SCR {
SpeciesNumber <- 1
match <-NULL
while ((is.null(match)) & (SpeciesNumber < length(SpecificSpecies$Species))) {
if (grepl(SpecificSpecies$Species[SpeciesNumber], SCR[row,]$MESH_HEADING)){
match <- TRUE}
SpeciesNumber <- SpeciesNumber + 1}
if ((is.null(match) & SpeciesNumber == length(SpecificSpecies$Species)) {
speciesNoMatch = rbind(speciesNoMatch, SCR[row])}
}}
但这非常慢,SCR 中有 65,000 个条目,SpecificSpecies 中有大约 1500 个条目。有没有办法用 lapply 像这样嵌套?或者其他一些我不熟悉的可以在这里有所帮助的功能?
我确信这是一个糟糕的代码。我是一名医学图书馆员,有时必须使用 R 进行数据分析,所以我的编程技能非常有限,但通常只要它们最终有效,我的解决方案是否丑陋或效率低下并不重要。我知道必须有更好的方法来做到这一点;请原谅我对可能是一个简单解决方案的事情一无所知。
【问题讨论】:
标签: r list nested-loops lapply