質問

今日の最寄りの日曜日を見つけようとしています。

今日定義します:

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)
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top