5

私はしばしばデータをxts形式で扱い、頻繁にそれらをスケーリングする必要があります (たとえば、ある日付で 100 に等しいとします)。私は現在、 -- を使用して機能する関数を使用してこれを行っていますが、これはあまり機能for-loopしていないようです。

これが私が今それを行う方法です:

df1 <- data.frame(rnorm(100), runif(100), 1:100*rnorm(100))
dfx <- xts(df1, order.by = seq(as.Date("2001-01-01"), by='mon', length.out=100))

dfxColScl <- function(dfrm, pos=1, idx = 100)
{
    scaledDF <- dfrm
    for (i in 1:ncol(dfrm)) {
        scaledDF[, i] <- dfrm[,i] / as.numeric(dfrm[pos, i]) * idx
    }
    return(scaledDF)
}

これを行う方法である巧妙なapply型関数はありRますか?

4

2 に答える 2

4

sweep行列を行で除算するために使用できます。

dfx.scaled2 <- sweep(100*dfx, 2, dfx[1], "/")
all.equal(dfx.scaled, dfx.scaled2) # same result as @Joshua
#[1] TRUE
于 2013-06-03T23:27:46.673 に答える