R 计算一个月内变量的数量

R 计算一个月内变量的数量,r,dataframe,R,Dataframe,如果我对每个日期都有一个频率,那么如何计算每个特定月份的频率总和 例如: 之前: df <- data.frame( Date = c('2010-01-15','2010-01-25','2010-02-12','2010-03-15','2010-03-11','2011-01-12'), Freq = c(1,1,1,1,0,1) ) 注:我不想将不同年份的同一月份相加,我希望它们被视为单独的月份。因此,示例中的月份为13 感谢您的帮助一个更简单的选择是转换为年-月

如果我对每个日期都有一个频率,那么如何计算每个特定月份的频率总和

例如:

之前:

 df <- data.frame(
   Date = c('2010-01-15','2010-01-25','2010-02-12','2010-03-15','2010-03-11','2011-01-12'),
   Freq = c(1,1,1,1,0,1)
 )
注:我不想将不同年份的同一月份相加,我希望它们被视为单独的月份。因此,示例中的月份为13


感谢您的帮助

一个更简单的选择是转换为年-月,并根据需要进行分组求和,可以从第一个“年”中减去“月”


一个更简单的选择是转换为年-月,如果需要,按总和分组,可以从第一个“年”中减去“月”

试试这个:

library(dplyr)
library(lubridate)

df %>% mutate(month=month(Date)) %>% group_by(month) %>%
  summarise(Total=sum(Freq))
试试这个:

library(dplyr)
library(lubridate)

df %>% mutate(month=month(Date)) %>% group_by(month) %>%
  summarise(Total=sum(Freq))
1将日期转换为yearmon类变量ym。此类在内部将年/月表示为年+分数,其中分数=0表示1月,1/12表示2月,…,11/12表示12月。将其转换为月数,并使用xtabs和as.data.frame执行聚合并转换为数据帧。这假设第一行的月数为一,其他行相对于该行计数。不管第一排是不是一月份,它都应该起作用。这只使用zoo软件包,而且很短

library(zoo)

ym <- as.yearmon(df$Date)
Month <- round(12 * (ym - ym[1]) + 1
as.data.frame(xtabs(Freq ~ Month, df))
2第二种方法是创建一个zoo对象Freq,同时聚合yearmon类时间索引。然后用一个月数替换yearmon索引,并使用fortify.zoo将其转换为数据帧,或者可能省略最后一行,将其保留为一个zoo系列

library(zoo)

Freq <- read.zoo(df, FUN = as.yearmon, aggregate = sum)
time(Freq) <- round(12 * (time(Freq) - time(Freq)[1])) + 1
fortify.zoo(Freq, name = "Month")
1将日期转换为yearmon类变量ym。此类在内部将年/月表示为年+分数,其中分数=0表示1月,1/12表示2月,…,11/12表示12月。将其转换为月数,并使用xtabs和as.data.frame执行聚合并转换为数据帧。这假设第一行的月数为一,其他行相对于该行计数。不管第一排是不是一月份,它都应该起作用。这只使用zoo软件包,而且很短

library(zoo)

ym <- as.yearmon(df$Date)
Month <- round(12 * (ym - ym[1]) + 1
as.data.frame(xtabs(Freq ~ Month, df))
2第二种方法是创建一个zoo对象Freq,同时聚合yearmon类时间索引。然后用一个月数替换yearmon索引,并使用fortify.zoo将其转换为数据帧,或者可能省略最后一行,将其保留为一个zoo系列

library(zoo)

Freq <- read.zoo(df, FUN = as.yearmon, aggregate = sum)
time(Freq) <- round(12 * (time(Freq) - time(Freq)[1])) + 1
fortify.zoo(Freq, name = "Month")

这与问题中给出的答案不一致。这与问题中给出的答案不一致。
  Month Freq
1     1    2
2     2    1
3     3    1
4    13    1