は私もStackexchangeで見つかったアルゴリズム(、素晴らしい仕事の連中を計算平日に基づいて式を書いたここでは、コードスニペットです:。2つのPOSIXct日付配列の間の特定の曜日を計算し、別の数値配列を返す方法は?
countwd <- function(start, end, day){
x <- seq(start, end, by=1)
y <- weekdays(x, TRUE)
sum(y==day)
}
x$OFFDAY <- NULL
for(i in 1:nrow(x)){
x$OFFDAY[i] <- countwd(x$PICK_DATE[i], x$SHIP_DATE[i], "Mon")
}
これは(あまりにも遅いですが、あたり2〜4行のようなループが進みます第二!!!!)、と私は月ごとに数百万のエントリを持っている。ここ
は、関数のベクトル化である:。
x$OFFDAY <- countwd(x$PICK_DATE, x$SHIP_DATE, "Mon")
は、このエラーを表示します
Error in seq.POSIXt(start, end, by = 1) : 'from' must be of length 1
私は比較する2つのベクトルを持っているので、この場合の「適用」ファミリ関数を適用する方法を理解できません(これは本当に新しいです)。
サンプルデータ:
PICK_DATE SHIP_DATE
01-APR-2017 00:51 02-APR-2017 06:55 AM
01-APR-2017 00:51 02-APR-2017 12:11 PM
01-APR-2017 00:51 02-APR-2017 12:11 PM
01-APR-2017 00:51 02-APR-2017 09:39 AM
(。しかし第2の値を返し、全く分からなぜしかし、私はそれを回避することはできません)私はPOSIXctにこれらを変換した、と式は、個々の値に適しています:
>countwd(x$PICK_DATE[1], x$SHIP_DATE[1], "Mon")
[1] 0
複数のリストまたはベクトル引数に関数を適用するには、 'mapply'を使用する必要があります。ここで 'x $ OFFDAY < - mapply(FUN = countwd、start = x $ PICK_DATE、end = x $ SHIP_DATE、day =" Mon ")'を実行します。しかし、日付がはるかに離れていれば、まだ遅いかもしれません。おそらく 'lubridate'パッケージを使う方が速いですが、私はそれを考える必要があります。 – meenaparam
'countwd'に個々の値が与えられているとき、これが意図した通りに動作することは確かですか?あなたは1または2を返すケースを試したことがありますか?0ではありませんか? – demirev
はい、 'countwd'は正しいカウントを与えますが、日数は与えません。なぜか分かりませんが、それは数秒です。 – Arani