1

私は時間内の測定期間についていくつかのテストを行おうとしています。測定ビンのサイズを増やしたい (つまり、1 か月対 2 か月など)。

私の問題は、月、週などで日付をインクリメントすることです.

df1 <- data.frame(id = 1:20, date1 = seq(as.Date('2012-01-01'),by = 'month', len = 20))
df1$date2 <- df1$date1 + 30

毎月または毎週の1日が必要な場合、これは明らかに間違っています。このタイプの問題に対する関数またはパッケージはありますか?

編集:

これ :

seq( x, by = "month", length.out = 1)

個々のセルでは機能するようですが、数値を返すため、列では機能しません。

df1$date2 <- sapply(df1$date1, function(x) seq( x, by = "month", length.out = 1))

> head(df1)
  id      date1 date2
1  1 2012-01-01 15340
2  2 2012-02-01 15371
3  3 2012-03-01 15400
4  4 2012-04-01 15431
5  5 2012-05-01 15461
6  6 2012-06-01 15492
4

2 に答える 2

3

あなたが探しているように聞こえますcut

df1$date2 <- cut(df1$date1 + as.difftime(31, units='days'), breaks='months')
df1$date3 <- cut(df1$date2 + as.difftime(1, units='weeks'), breaks='weeks')
于 2013-10-17T13:56:24.637 に答える
1

もっとエレガントな解決策があるかもしれませんが、これはうまくいくはずです -

df1$date2 <- as.Date(
   paste(
      ifelse(
         strftime(df1$date1,'%m') == 12,  
         as.integer(strftime(df1$date1,'%Y')) + 1,
         as.integer(strftime(df1$date1,'%Y'))
      ),
      ifelse(
         strftime(df1$date1,'%m') == 12,  
         1,
         as.integer(strftime(df1$date1,'%m')) + 1
      ),
      1,
      sep = "-"
   ),
"%Y-%m-%d"
)
于 2013-10-17T13:20:42.690 に答える