我想优化以下嵌套for循环,循环遍历数据框中的select列,并检查它是否对应于vector中的值/字符串:
Positions=c()
for (col in vectorCols ) {
for (code in vectorCodes ){
Positions<- c(Positions,which(as.numeric(df[,col])==code))
}
数据框非常大,有80万行。 vectorCodes可以是100个项目,大约20个选定的列(2000年)。
我也尝试了类似下面的内容,但它没有帮助
FunctionGrepCol<-function(col){
Positions <- unlist( lapply( vectorCodes , function(x) (Positions,which(as.numeric(df[,col])==x)) ) )
}
Positions <-unlist(lapply(vectorCols, FunctionGrepCol ))
有没有办法将嵌套的for循环组合在一个apply函数中来优化它?
答案 0 :(得分:1)
您可以尝试此解决方案,而不是循环遍历列名称和子集,您可以先对数据框进行子集化,然后像列表一样循环遍历它。
Positions <- unlist(lapply(df[, vectorCols], function(col) which(col %in% vectorCodes)))