11

に1 か月を追加して、startDateとの間の日付シーケンスを取得したいと考えています。つまり、が 2013-01-31 でが 2013-07-31 の場合、次のような日付を表示したいと思います。endDatestartDatestartDateendDate

"2013-01-31" "2013-02-28" "2013-03-31" "2013-04-30" "2013-05-31" "2013-06-30" "2013-07-31"

私が試してみました

seq.Date(as.Date("2013-01-31"),by="month",length.out=7)

しかし、このコードの出力は次のようになります

> seq.Date(as.Date("2013-01-31"),by="month",length.out=7)
[1] "2013-01-31" "2013-03-03" "2013-03-31" "2013-05-01" "2013-05-31" "2013-07-01" "2013-07-31"

では、正しい出力を得るための最も簡単な解決策は何ですか?

4

2 に答える 2

24

私は R で日付を扱う必要があり、日付データ用に見つけた最も便利なパッケージの 1 つはlubridate. あなたの問題については、次のことを簡単に行うことができます。

require(lubridate)
# ymd function parses dates in year-month-day format
startDate <- ymd('2013-01-31')
# The %m+% adds months to dates without exceeding the last day
myDates <- startDate %m+% months(c(0:6))

lubridate他にも日付用の関数がたくさんありますので、ぜひご覧になることを強くお勧めします。

于 2013-07-16T16:19:24.780 に答える
15

R はその月の最終日をどう処理するかわからないため、これは機能しません。したがって、簡単な解決策があります。同じことを行いますが、翌月の 1 日を使用してから 1 を引きます。

seq(as.Date("2013-02-1"),by="month",length.out=7) - 1
[1] "2013-01-31" "2013-02-28" "2013-03-31" "2013-04-30" "2013-05-31" "2013-06-30" "2013-07-31"
于 2013-07-16T15:57:25.443 に答える