質問
今日の最寄りの日曜日を見つけようとしています。
今日定義します:
dt <- as.Date("2014-06-04")
.
私は次の日曜日を見つけることができます:
dt - as.POSIXlt(dt)$wday
[1] "2014-06-01"
.
次の日曜日を次の日曜日に見つけることができます:
dt + as.POSIXlt(dt)$wday
[1] "2014-06-07"
.
は、なぜなぜ機能していないのかわからない:
ifelse(as.POSIXlt(dt)$wday <= 3,
dt - as.POSIXlt(dt)$wday,
dt + as.POSIXlt(dt)$wday)
[1] 16222
.
私は日付の代わりに番号:16222
を取得しています。
次の各ステートメントが期待通りに機能します。
as.POSIXlt(dt)$wday
class(as.POSIXlt(dt)$wday)
as.POSIXlt(dt)$wday <= 3
.
任意のアイデア??
解決
ifelse
はベクトルを返し、日付から "POSIX"クラスをストリップするようです。なぜ
dt + ifelse(as.POSIXlt(dt)$wday <= 3, -1, 1) * as.POSIXlt(dt)$wday
.
代わりに
他のヒント
別の解決策:e.gを呼び出してクラス属性を復元します。:
structure(ifelse(as.POSIXlt(dt)$wday <= 3,
dt - as.POSIXlt(dt)$wday,
dt + as.POSIXlt(dt)$wday), class="Date")
. ifelse
を使用する必要がありません。ここでは、古典的なif/else
がジョブを実行します。
if(as.POSIXlt(dt)$wday <= 3) dt - as.POSIXlt(dt)$wday else dt + as.POSIXlt(dt)$wday
[1] "2014-06-01"
.
またはさらに単純な:
wday <- as.POSIXlt(dt)$wday
dt + if(wday<= 3) -wday else wday
. 1)これを試してみてください:
wday <- as.POSIXlt(dt)$wday
dt + ifelse(wday <= 3, -wday, 7-wday)
.
これは、ifelse
を追加または減算した日数に適用します。ifelse
はプレーン数でうまく機能しますが、"Date"
クラスのような複雑な型では機能しません。
ifelse
の場合、"Date"
を追加し、wday > 3
を追加します。
ここでの解決策は、7-wday
が日付のベクトルであっても機能し続けます。
2)(1)の回答の2行目は、最後の日曜日(wday
)を最初に計算し、次の日曜日を取得するために7を追加する次の方法を次のように書くことができます。週の過去の水曜日。
dt - wday + ifelse(wday > 3, 7, 0)
.
3)これを表現するもう1つの方法は次のとおりです。
dt - wday + 7 * (wday > 3)
. 所属していません StackOverflow