在R中创建季度子集

厨师1075

我有一个包含多年时间数据的数据框。它具有其他数据,包括名称,金额和日期。我想将数据框细分为年度季度,以衡量相应季度的某些方面。例如,我只想查看一月,二月和三月的收入。

我确保日期列是一个时间序列:

class(data_frame$launch_date)
>"Date"

我尝试过此代码,以获取3月之前(包括3月)的第一季度/月份的数据:

subset(data_frame, format.Date(launch_date, "%m") <= "03")

但这并没有给我一个新的数据框架和以下响应:

<0 rows> (or 0-length row.names)

我尝试过

data_frame_q1 <- data.frame(data_frame, data_frame$launched < as.Date("2013-03-31"))

但是我没有得到数据的子帧。

有什么建议吗?

Nograpes

您接近了,但是您需要学习如何正确地对数据进行子集化。

几点评论:请勿使用subset它可以工作,但是您应该习惯于更“ R”的工作方式。用替换数据框[其次,format.Date如果函数的参数为Date; ,则无需专门调用您只需致电format,R就会为您选择合适的功能。

因此,您的函数无法正常工作的原因是因为您正在character<=不允许的类型进行比较将它们转换为数字,它将起作用:我不知道为什么你的原版不起作用。它为我工作。

# Generate some data
set.seed(1)
n<-100
data_frame<-data.frame(launch_date=as.Date(Sys.time())+runif(n,1,365))

subset(data_frame,as.numeric(format(launch_date, "%m"))<=3)

但是,不要使用,而subset只需使用[运算符即可:

data_frame[as.numeric(format(data_frame$launch_date, "%m"))<=3,]

这只是意味返回所有的行,其中as.numeric(format(data_frame$launch_date, "%m"))<=3TRUE

如果要将数据分成四分之一,可以制作一个小的映射表:

quarters.map<-data.frame(month=1:12,quarter=rep(1:4,each=3))
#    month quarter
# 1      1       1
# 2      2       1
# 3      3       1
# 4      4       2
# 5      5       2    

然后就merge可以了:

head(merge(data_frame,quarters.map))
#   month launch_date quarter
# 1     1  2015-01-14       1
# 2     1  2015-01-17       1
# 3     1  2015-01-29       1
# 4     1  2015-01-20       1
# 5     1  2015-01-10       1
# 6     1  2015-01-17       1

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章