我正在尝试执行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
答案 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
至少,这个答案应该给你一些其他基准来反对: - )