首页 > 解决方案 > 是否有按月拆分数据的 R 函数?

问题描述

我有以下格式的数据:

content, date    
Hello, 2019-05-11T23:59:02+00:00     
Amazing, 2019-01-08T20:22:02+00:00  
Come on, 2018-11-15T10:52:45+00:00  
We won, 2018-08-25T16:33:23+00:00

这只是数据的一个样本,而我在 2018 年 8 月到 2019 年 5 月之间有超过 100 万行带有“日期”的行。我想将我的数据分成 10 个不同的数据框,每个数据框代表一个特定的月份(即1 = 2018 年 8 月,2 = 2018 年 9 月,...,10 = 2019 年 5 月)。

我尝试使用 dplyr group-by 方法并执行循环,但没有发现任何成功。我也尝试了其他帖子的代码,但无济于事。

任何帮助深表感谢。我是 Stack Overflow 的新手,如果我没有遵守任何形式的行为准则,我深表歉意。先感谢您!

标签: rsplit

解决方案


Lubridate软件包具有满足您需求的功能。这里的关键是制作它们Dates(或POSIX)。

require(tidyverse)
require(lubridate)
df <- data.frame(content=c('H','A'),
                 date=c('2019-05-11T23:59:02+00:00', '2019-01-08T20:22:02+00:00'))

df %<>% 
  mutate(date=ymd_hms(date)) %>% 
  mutate(monthGroup=floor_date(date, unit='month'))

您可以使用该信息手动过滤每个月,也可以将其放入循环/应用中以使计算机执行此操作。

df %>% 
  filter(monthGroup==ymd('2019-05-01'))

另一种不使用的方法floor_date()

df <- data.frame(content=c('H','A'),
                 date=c('2019-05-11T23:59:02+00:00', '2019-01-08T20:22:02+00:00'))

获取 2019 年 4 月的所有日期;即 2019 年 5 月 1 日之前和 2019 年 4 月 1 日之后的日期。

df %>% 
  mutate(date=ymd_hms(date)) %>% 
  filter(date<ymd('2019-05-01') &
         date>=ymd('2019-04-01'))

推荐阅读