如何将R的每日值转换为每月值

如何将R的每日值转换为每月值,r,statistics,time-series,R,Statistics,Time Series,所以我有一个日期和住院的数据。数据为两年内每天的数据。数据看起来有点像这样: Date cardioadmission respiratoryadmission 2001-01-01 12 06 2001-01-02 10 5 2001-01-03 08 4 2001-01-04 04

所以我有一个日期和住院的数据。数据为两年内每天的数据。数据看起来有点像这样:

Date        cardioadmission   respiratoryadmission
2001-01-01        12                   06
2001-01-02        10                   5
2001-01-03        08                   4
2001-01-04        04                   6
year         cvdadmissions   respiratoryadmissions
2001            21                 22
我想做一个这样的结果表

year    cvdadmissions   respiratoryadmissions
所以我想把每年的日期加起来,然后除以夏天和冬天。假设我希望看到结果如下所示:

Date        cardioadmission   respiratoryadmission
2001-01-01        12                   06
2001-01-02        10                   5
2001-01-03        08                   4
2001-01-04        04                   6
year         cvdadmissions   respiratoryadmissions
2001            21                 22
所以我想按月报告入学情况,而不是每天。某种聚合的东西。有人能告诉我这件事吗

更新:

summary <- data %>%
mutate(month = month(Date),  # what should i write in month and also in 
date
year = year(Date)) %>%  #same here what should i write in year and 
year(date)
group_by(month, year) %>%   # which month and by year which year. 
summarise(cvdadmission = sum(cvdadmission),
respiratoryadmission = sum(respiratoryadmission) # i have understood this part. 
摘要%
mutate(month=month(Date),#我应该在month和month中写什么
日期
年份=年份(日期))%>%#这里相同我应该在年份和日期中写什么
年份(日期)
按(月、年)%>%#哪个月、哪个年分组。
总结(CVDADSMISSION=总和(CVDADSMISSION),
呼吸器许可=总和(呼吸器许可)#我理解这部分。
你能更详细地解释一下背后的逻辑吗


谢谢

添加年/月或年列,并通过以下方式进行汇总:

library(zoo)

DFym <- transform(DF0, YearMon = as.yearmon(Date))[-1]
aggregate(. ~ YearMon, DFym, sum)
##    YearMon  cardioadmission respiratoryadmission
## 1 Jan 2001               34                   21

DFy <- transform(DF0, Year = as.integer(as.yearmon(Date)))[-1]
aggregate(. ~ Year, DFy, sum)
##   Year  cardioadmission respiratoryadmission
## 1 2001               34                   21
图书馆(动物园)

DFym您可以使用
dplyr
lubridate
,如下所示:

library(dplyr)
library(lubridate)
df %>%
  mutate(year = year(Date)) %>%
  summarise(cvdadmissions = sum(cardioadmission),
            respiratoryadmissions = sum(respiratoryadmission))

如果你想分为冬季和夏季,那么你可以通过提取
月份
来变异另一个字段
季节
,并在
分组(年,季节)
中使用该字段

library(dplyr)
library(lubridate)

summary <- data %>%
    mutate(month = month(Date),
           year = year(Date)) %>%
    group_by(month, year) %>%
    summarise(cvdadmission = sum(cvdadmission),
              respiratoryadmission = sum(respiratoryadmission)
库(dplyr)
图书馆(lubridate)
汇总%
变异(月=月(日),
年份=年份(日期))%>%
分组单位(月、年)%>%
总结(CVDADSMISSION=总和(CVDADSMISSION),
呼吸器许可=总和(呼吸器许可)

在base R中,您可以使用
格式
添加年份列

df$Year <- format(as.Date(df$Date), "%Y")
#         Date cardioadmission respiratoryadmission Year
# 1 2001-01-01              12                    6 2001
# 2 2001-01-02              10                    5 2001
# 3 2001-01-03               8                    4 2001
# 4 2001-01-04               4                    6 2001
数据

df <- structure(list(Date = structure(1:4, .Label = c("2001-01-01", 
                                                      "2001-01-02", "2001-01-03", "2001-01-04"), class = "factor"), 
                     cardioadmission = c(12, 10, 8, 4), respiratoryadmission = c(6, 
                                                                                 5, 4, 6)), class = "data.frame", row.names = c(NA, -4L))

df查看一下
lubridate
包,例如功能
year
谢谢您的解释,但我仍然没有理解。我正在编辑问题以了解更多细节。谢谢上面公式中的日期,它指的是该列。无需输入具体日期。它正在做的是创建一个名为month的新列这是日期列中每个日期的月份,这一年也是如此。然后我们告诉它按这两列分组,有效地删除日期的日期部分。将其视为Excel中的数据透视表。我们将年和月放在行值中,将cvdadmission和呼吸机Administration之和放在值中。我已经知道了我的数据中有ve个月和年列。因此,在这种情况下,公式中将省略mutate。我是否应该从summary%开始,删除mutate并保留公式的其余部分。你能给我推荐一些youtube教程吗?我一直在试图找到一个合适的教程,但找不到。
df <- structure(list(Date = structure(1:4, .Label = c("2001-01-01", 
                                                      "2001-01-02", "2001-01-03", "2001-01-04"), class = "factor"), 
                     cardioadmission = c(12, 10, 8, 4), respiratoryadmission = c(6, 
                                                                                 5, 4, 6)), class = "data.frame", row.names = c(NA, -4L))