首页 > 解决方案 > 如何使用 R 将我的每日日期列分组为每月日期?

问题描述

我有一个名为 Police_notifications 的数据框,这就是它的样子。

datum
1 06-03-2019 11:34:57
2 06-03-2019 11:15:12
3 06-03-2019 11:23:22
4 06-03-2019 11:23:22
5 06-03-2019 11:15:12
6 06-03-2019 11:07:07
7 06-04-2019 11:05:20
8 06-04-2019 11:10:30

日期列从 2015 年 12 月 11 日持续到 2019 年 6 月 3 日。列日期存在于每日日期之外。
日期列中的每一行代表 1 个值。所以我基本上想要的是一个额外的列,加上 1 个月的总值,所以我想要这样:

value    date
100    01-03-2019
200    01-04-2019
150    01-05-2019

我正在寻找一个简单的解决方案来将我的每日日期转换为月份,并在其旁边添加总价值。

额外的信息:

                 datum                                   locatie
1  06-03-2019 11:34:57                                   De Bilt
2  06-03-2019 11:23:22                                     Breda
3  06-03-2019 11:23:22                                     Breda
4  06-03-2019 11:15:12                                  Nijmegen
5  06-03-2019 11:07:07                                  Deventer
6  06-03-2019 11:05:27                                   Tilburg
7  06-03-2019 11:04:37 A15 hectometerpaal 144 (thv Neder-Betuwe)
8  06-03-2019 10:59:33                            Oud-Beijerland
9  06-03-2019 10:52:44                                  Den Haag
10 06-03-2019 10:26:46                                  Den Haag

标签: rdateconverters

解决方案


您可以将时间戳转换为包含该月第一天的字符串,然后应用 group_by() 并计数以查找给定月份中的通知数量(如果要将数字添加为新列,请使用group_by 和变异版本):

df <- data.frame(ID = 1:8,
                 timestamp = c("06-03-2019 11:34:57", "06-03-2019 11:15:12", "06-03-2019 11:23:22",
                               "06-03-2019 11:23:22", "06-03-2019 11:15:12", "06-03-2019 11:07:07",
                               "06-04-2019 11:05:20", "06-04-2019 11:10:30"),
                 stringsAsFactors = F)

library(dplyr)
df %>% 
  mutate(month = format(as.POSIXct(timestamp, format = "%d-%m-%Y %H:%M:%S"), "01-%m-%Y")) %>% 
  group_by(month) %>% 
  count()

df %>% 
  mutate(month = format(as.POSIXct(timestamp, format = "%d-%m-%Y %H:%M:%S"), "01-%m-%Y")) %>% 
  group_by(month) %>% 
  mutate(n = n())

推荐阅读