在不循环的数据帧上的行滚动中应用自定义百分比函数-R

时间:2019-06-04 07:19:07

标签: r function dataframe apply rolling-computation

我有一个具有1万行和150列的数据框。我想应用滚动自定义函数来使用简单的百分等级函数(function(x, xo) sum(x <= xo,na.rm = T)/sum(!is.na(x)))计算百分等级,其中x是数值的数据框,而xo是要在其上计算等级的值。问题是我当前正在使用一个循环,并且花费了大量时间。我使用循环的原因是该函数应用于动态更改数据帧的行数。有没有办法避免循环并节省一些时间?这个过程大约需要71秒,我需要针对250个不同的数据集运行它(总共大约5个小时)。

我尝试使用Apply函数,但没有结果。

ptm <- proc.time()
function(x, xo) sum(x <= xo,na.rm = T)/sum(!is.na(x))
df <- as.data.frame(matrix(data= runif(1:1000),nrow = 10000,ncol=150))
df2 <- as.data.frame(matrix(data= runif(1:1000),nrow = 10000,ncol=1))
df[,1:150] <- runif(1:10000)
colnames(df) <- c("Value_to_Rank","Percent.Range1","Percent.Range2","Percent.Range3") # named only 4 columns
for (i in c(1:nrow(BetaTotal))){
    df2[i,1] <- perc.rank(df[1:i,3:150],df[i,2])
 }
   proc.time() - ptm


   user  system elapsed 
  71.46    0.23   72.67

任何效率都值得赞赏!我尝试添加带有“ rollwindow”元素(在本例中为i)和基于该元素的子集的另一列,但未成功。

0 个答案:

没有答案