使用for循环搜索项目

时间:2014-11-06 14:34:19

标签: r

我正在尝试执行for循环,它将搜索数据框中的每一行,但只是 第一列检查tag ID,如果不是它,那么它应该移动到下一行,依此类推,直到它找到值或到达数据帧的末尾。 然后应该打印结果行。

目的只是检查for循环的工作方式以及"缓慢"它是(我希望它与其他搜索方式相比)。我在R和编程方面有点缺乏经验。

目前为止进展/我的代码

到目前为止,我已完成此代码,停止点是如何使函数移动到另一列并检查它并移动到下一列。

SearchID = function(data,value) {
  for(i in 1:nrow(testdata)) {
    row <- testdata[i,1]
    if("row" == "value") return(row)
    #what now?
  }

}  

这是一个可重复的例子:

ID=c("ID43","ID23","ID14","ID14")
y=c(23,45,66,76)
k=c("yes","no","yes","no")

testdata= data.frame(ID,y,k)

如果我将ID14作为value,则应该使用ID14返回整行:

    ID   y   k
 4  ID14 76  no

2 个答案:

答案 0 :(得分:0)

在这里,首先创建一个对象d1,以保存与value列匹配的行ID。我们使用data循环遍历for的每一行并检查条件。如果匹配,则使用rbind将该行与创建的对象绑定。您也可以将d1初始化为d1 <- data.frame()

SearchID <- function(data,value) {
        d1 <- c()
       for(i in 1:nrow(data)) {
        row <- data[i,1]
         if(row==value){
        d1 <- rbind(d1,data[i,])
          }
       }
    d1
  }

 SearchID(testdata, 'ID14')
 #   ID  y   k
 #3 ID14 66 yes
 #4 ID14 76  no

 SearchID(testdata, 'ID43')
 #  ID  y   k
 #1 ID43 23 yes

  SearchID(testdata, "ID86")
  #NULL

答案 1 :(得分:0)

目前尚不清楚在试图回答这个问题时可以做出关于R知识的假设。例如,如果我们可以假设我们知道如何基于行索引向量提取行,那么对于我来说,比逐行绑定行更自然:

SearchID = function(data,value) {
  getme <- numeric()                       # Initialize empty vector
  for(i in 1:nrow(data)) {                 # Start the loop
    row <- data[i, 1]                      # Capture the relevant value
                                           # Compare, and If there's a match,
    if (row == value) getme <- c(getme, i) # add loop index to "getme" vector
  }
  if (length(getme) == 0) NULL             # If the vector is still empty, NULL
  else data[getme, ]                       # else return the relevant rows
} 

SearchID(testdata, "ID14")
#     ID  y   k
# 3 ID14 66 yes
# 4 ID14 76  no

至少,这个答案应该给你一些其他基准来反对: - )