0

24 列のデータ フレーム オブジェクトがあり、それぞれの長さが異なります。すべての列に 24 個の値のベクトルを掛けたいと思います。マトリックスがないので、適用機能を使用することを考えています。私の推測は次のようなものです:

trans_temp:
                    Ta.f Ta.f Ta.f Ta.f
1995-10-13 04:00:00 13.6 13.6 13.6 13.6
1995-10-13 05:00:00 13.6 13.6 13.6 13.6
1995-10-13 06:00:00 13.6 13.6 13.6 13.6
1995-10-13 07:00:00 13.5 13.5 13.5 13.5
1995-10-13 08:00:00 13.5 13.5 13.5 13.5

そして私のベクトルは

    x <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24)

したがって、最初の列に 1 を掛け、2 番目の列に 2 を掛け、3 番目の列に 3 を掛けます。data.frame オブジェクトなので、直接掛けることはできません。

apply(trans_temp,x,MARGIN=2,fun)

何か助けはありますか?

4

3 に答える 3

3

行列を直接作成して、データを乗算するだけです。

as.matrix(trans_temp) * col(trans_temp)

eddi によるベンチマーク

m <- as.data.frame(matrix(runif(1e7), ncol=1000))
x <- seq_len(1000)
system.time(tt1 <- as.matrix(m) * col(m)) # 0.335 seconds
system.time(tt2 <- t(x*t(m))) # 0.505 seconds
identical(tt1, tt2) # TRUE
于 2013-04-24T15:07:17.947 に答える
2

applyR リサイクル動作に依存する、を使用しない別のアプローチを次に示します。

t(x*t(trans_temp))

これはおそらく、他の 2 つのアプローチよりもはるかに高速です。

^^^ Arun の編集後はもうありません :) これが現在行っていることは、任意の操作を行うことができるということですx(そして、任意の操作に加えて任意xの操作が必要な場合は、サイモンの答えを使用します)。

于 2013-04-24T15:18:07.787 に答える