使用for循环搜索项目

使用for循环搜索项目,r,R,我试图做一个for循环,它将搜索数据帧中的每一行,但只搜索 第一列检查标记ID,如果不是,则应移动到下一行,依此类推,直到找到值或到达数据帧的末尾。 然后,应打印结果行 目的只是检查for循环的工作方式以及它的“速度”有多慢(我希望它与其他搜索方式进行比较)。我在R和编程方面有点经验不足 迄今为止的进展/my code 到目前为止,我已经完成了这段代码,停止点是如何使函数移动到另一列,检查它并移动到下一列 SearchID = function(data,value) { for(i in

我试图做一个for循环,它将搜索数据帧中的每一行,但只搜索 第一列检查
标记ID
,如果不是,则应移动到下一行,依此类推,直到找到值或到达数据帧的末尾。 然后,应打印结果行

目的只是检查for循环的工作方式以及它的“速度”有多慢(我希望它与其他搜索方式进行比较)。我在R和编程方面有点经验不足

迄今为止的进展/my code

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

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

}  
如果我将
ID14
作为
,它应该返回整行的
ID14

    ID   y   k
 4  ID14 76  no

在这里,首先创建一个对象
d1
,以保存与
ID
列匹配的行。我们使用
for
循环遍历
数据的每一行,并检查条件。如果匹配,则使用
rbind
将该行与创建的对象绑定。您还可以将
d1
初始化为
d1在试图回答这个问题时,不清楚可以对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
SearchID=函数(数据、值){

getme为什么不仅仅是
testdata[testdata$ID==“ID14”,]
@AnandaMahto我知道“捷径”,但我正试图学习R,而且我从未学习过任何其他编程语言,我希望看到其他解决方案。另外,在进行比较时不要引用“行”和“值”。并返回相关行(
testdata[i,]
)而不是
row
的值。如果我理解正确,我可以请您逐行解释一下吗:1.您创建了一个空向量2.搜索循环3.如果它是正确的值,则将数据绑定到向量4.返回值d1.我得到正确的结果了吗?
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
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