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