R:仅保留数据集中当月的第一个观测值

biswetbf  于 2023-02-10  发布在  其他
关注(0)|答案(2)|浏览(143)

我有这样一个数据框架,它有成千上万的行和列,第一列包含日期,后面的列包含对应于该日期的资产回报指数。
| 日期|资产_1|资产_2|资产_3|资产_4|
| - ------|- ------|- ------|- ------|- ------|
| 二零零零年一月一日|一千|三百|二九零零|* * 不适用**|
| ...|||||
| 二○ ○ ○年一月三十一日|1100年|三百五十|小行星2950|* * 不适用**|
| 二○ ○ ○年二月二日|小行星1200|三百三十|小行星2970|一百|
| ...|||||
| 二○ ○ ○年二月二十八日|小行星1200|三六零|三千|二百|
| 二零零零年三月一日|小行星1200|三百七十|3500|三百|
我想通过只保留每月的第一个观测值来将其转换为每月数据集。
我已经提出了以下脚本:

library(dplyr)
library(lubridate)
monthly <- daily %>% filter(day(DATE) == 1)

然而,这样做的问题是,它不工作的几个月,每月的第一天不是交易日期(又名它是从每日数据集失踪)。
因此,当我运行命令时,那些第一天不存在的月份将从数据集中排除。

5gfr0r5j

5gfr0r5j1#

如果数据总是有序的,你可以按年\月分组,然后保留(切片)每个组的第一条记录。

df<-data.frame(mydate=as.Date("2023-01-01")+1:45)

library(tidyverse)
library(lubridate)

df %>% 
  group_by(ym=paste(year(mydate), month(mydate))) %>% 
  #group_by(year(mydate), month(mydate)) %>% 
  slice_head(n=1)
apeeds0o

apeeds0o2#

使用slice_min

library(dplyr) # version 1.1.0 or later
library(zoo)

daily %>% 
  mutate(ym = as.yearmon(DATE)) %>%
  slice_min(DATE, by = ym)

相关问题