首页 > 解决方案 > 创建一个数据表,其中日期为周,列为条目数

问题描述

我正在尝试在 R 中制作一个新的数据表,将日期分组为当月内的周数,例如 6 月 1 日、6 月 2 日、6 月 3 日……然后是一个新列,总结每个内的条目数. 例如,我当前的数据集是:

在此处输入图像描述

我正在尝试隔离我已经使用 'Vigilent' 的所有条目data2 <- data2 %>% filter(data2$Activity == "Vigilent"),但是我现在需要创建一个新的数据集,将条目分组到每月的几周。

我已经使用以下方法将数据分组为一年中的几周:

x <- date2week(data2$Date, week_start = "Sunday", floor_day = TRUE)

table(x)

x

2008-W24 2008-W25 2008-W26 

       1        3        4 

但我希望它采用“6 月 1 日、6 月 2 日等”的格式,以及每周在单独列中的条目数。这可能吗?

这是 dput() 的输出

structure(list(Date = c("14/06/2008", "18/06/2008", "19/06/2008", 
"20/06/2008", "23/06/2008", "25/06/2008", "26/06/2008", "27/06/2008", 
"28/06/2008"), Location = c("Park", "Park", "Grassland", "Grassland", 
"Grassland", "Grassland", "Grassland", "Forest", "Park"), Age = c("Adult M", 
"Adult F", "Adult F", "Adult F", "Adult M", "Adult M", "Adult M", 
"Adult M", "Adult F"), Activity = c("Vigilient", "Vigilient", 
"Vigilient", "Vigilient", "Vigilient", "Vigilient", "Vigilient", 
"Vigilient", "Foraging")), class = "data.frame", row.names = c(NA, 
-9L))

我想要的输出如下(计数值是虚构的)

例如,我其他列可以打折,我只想知道在 7 月的某一周有多少 Vigilent 事件

标签: rdatasetgrouping

解决方案


library(tidyverse)
library(lubridate)

df %>% 
  dplyr::filter(Activity == "Vigilient") %>% 
  dplyr::mutate(Date = dmy(Date),
                Month = month(Date, label = T, abbr = F),
                Month_Week = week(floor_date(Date, unit = "week", week_start = 7))- week(floor_date(Date, unit = "month")) + 1,
                Label = sprintf("Week %i %s", Month_Week, Month)) %>% 
  dplyr::count(Label, name = "Vigilence Count")

输出

        Label Vigilence Count
1 Week 2 June               1
2 Week 3 June               3
3 Week 4 June               4

  1. 大多数日期函数来自lubridate库:dmy, month, week.
  2. Date被此代码覆盖。它成为一个日期对象。如果这不是您想要的行为/您需要保留原始Date列,那么您可能希望在mutate函数中将其重命名为其他名称。

推荐阅读