3

私は df を持っています:

     dates  V1  V2  V3  V4  V5  V6  V7  V8  V9  V10
1999-05-31  66  65  64  63  62  61  60  59  58  57
1999-06-01  67  66  65  64  63  62  61  60  59  58
1999-06-02  68  67  66  65  64  63  62  61  60  59
1999-06-03  69  68  67  66  65  64  63  62  61  60
1999-06-04  70  69  68  67  66  65  64  63  62  61
1999-06-17  79  78  77  76  75  74  73  72  71  70
1999-06-18  80  79  78  77  76  75  74  73  72  71
1999-06-21  81  80  79  78  77  76  75  74  73  72
1999-06-22  82  81  80  79  78  77  76  75  74  73
1999-06-23  83  82  81  80  79  78  77  76  75  74
1999-06-24  84  83  82  81  80  79  78  77  76  75
1999-06-25  85  84  83  82  81  80  79  78  77  76
1999-06-28  86  85  84  83  82  81  80  79  78  77
1999-06-29  87  86  85  84  83  82  81  80  79  78
1999-06-30  88  87  86  85  84  83  82  81  80  79

上記の df を毎月の最終日までにサブセット化したいと思います。つまり、1999-05-31 と 1999-06-30 の日付のみが存在します。実際のデータ フレームははるかに大きく、最後の日付は毎月 28 日、29 日などになる場合があります。したがって、出力を次のようにしたいと思います。

dates   V1  V2  V3  V4  V5  V6  V7  V8  V9  V10
1999-05-31  66  65  64  63  62  61  60  59  58  57 
1999-06-30  88  87  86  85  84  83  82  81  80  79
1999-10-29  175 174 173 172 171 170 169 168 167 166

動物園や他のパッケージでいくつかの機能を見つけようとしていましたが、見つかりませんでした...すべての提案に最適です!

4

3 に答える 3

3

日付が日付として適切にフォーマットされ、ソースデータフレームがであると仮定しますx

> library(xts)
> x[endpoints(x$dates, on = "months"), ]
        dates V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1  1999-05-31 66 65 64 63 62 61 60 59 58  57
15 1999-06-30 88 87 86 85 84 83 82 81 80  79
于 2012-09-19T11:58:33.313 に答える
2

これにより、月の最後の日が選択されます。

df[as.numeric(substr(as.Date(df$dates) + 1, 9, 10))
   < as.numeric(substr(df$dates, 9, 10)), ]

#        dates V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
#1  1999-05-31 66 65 64 63 62 61 60 59 58  57
#15 1999-06-30 88 87 86 85 84 83 82 81 80  79

このソリューションは、(データに関係なく) 1 日あたりの絶対月数に依存することに注意してください。

実際のデータで各月の最終日を選択する場合は、次のコマンドを使用します。

df[c(diff(as.numeric(substr(df$dates, 9, 10))) < 0, TRUE), ]
于 2012-09-19T10:57:06.940 に答える