使用apply优化R中的嵌套for循环?

时间:2016-06-05 22:02:18

标签: r for-loop apply

我想优化以下嵌套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函数中来优化它?

1 个答案:

答案 0 :(得分:1)

您可以尝试此解决方案,而不是循环遍历列名称和子集,您可以先对数据框进行子集化,然后像列表一样循环遍历它。

Positions <- unlist(lapply(df[, vectorCols], function(col) which(col %in% vectorCodes)))