在R中创建季度子集
我有一个数据框架,里面有一年的时间数据。它还有其他数据,如名称、金额和日期。我想将数据框架分为年度季度,以测量相应季度的某些方面。例如,我只想查看1月、2月和3月的收入 我已确保dates列是一个时间序列:在R中创建季度子集,r,date,R,Date,我有一个数据框架,里面有一年的时间数据。它还有其他数据,如名称、金额和日期。我想将数据框架分为年度季度,以测量相应季度的某些方面。例如,我只想查看1月、2月和3月的收入 我已确保dates列是一个时间序列: class(data_frame$launch_date) >"Date" 我已尝试使用此代码,以获取包括3月份在内的第一季度/月份的数据: subset(data_frame, format.Date(launch_date, "%m") <= "03") 子集(data\
class(data_frame$launch_date)
>"Date"
我已尝试使用此代码,以获取包括3月份在内的第一季度/月份的数据:
subset(data_frame, format.Date(launch_date, "%m") <= "03")
子集(data\u frame,format.Date(launch\u Date,“%m”)只是把我的评论变成了答案
library(lubridate)
subset(data_frame, quarter(launch_date) == 1)
## Using @thelatemail's data
> subset(data_frame, quarter(launch_date) == 1)
id launch_date
1 1 2014-01-01
2 2 2014-02-01
3 3 2014-03-01
虽然我也对你的方法有什么问题感到困惑。也许你没有得到正确的列名?一开始你使用的是launch\u date
,但在你的数据框中你使用的是launched
只是把我的评论变成了答案
library(lubridate)
subset(data_frame, quarter(launch_date) == 1)
## Using @thelatemail's data
> subset(data_frame, quarter(launch_date) == 1)
id launch_date
1 1 2014-01-01
2 2 2014-02-01
3 3 2014-03-01
虽然我也对你的方法的错误感到困惑。也许你没有得到正确的列名?一开始你使用的是launch\u date
,但在你的data\u框架中,你使用的launched
似乎对我有效,不确定你做了什么:
data_frame <- data.frame(
id=1:5,
launch_date=seq.Date(as.Date("2014-01-01"),as.Date("2014-05-01"),by="1 month")
)
# id launch_date
#1 1 2014-01-01
#2 2 2014-02-01
#3 3 2014-03-01
#4 4 2014-04-01
#5 5 2014-05-01
class(data_frame$launch_date)
#[1] "Date"
subset(data_frame, format.Date(launch_date, "%m") <= "03")
# id launch_date
#1 1 2014-01-01
#2 2 2014-02-01
#3 3 2014-03-01
data\u frame似乎适合我,不确定你做了什么:
data_frame <- data.frame(
id=1:5,
launch_date=seq.Date(as.Date("2014-01-01"),as.Date("2014-05-01"),by="1 month")
)
# id launch_date
#1 1 2014-01-01
#2 2 2014-02-01
#3 3 2014-03-01
#4 4 2014-04-01
#5 5 2014-05-01
class(data_frame$launch_date)
#[1] "Date"
subset(data_frame, format.Date(launch_date, "%m") <= "03")
# id launch_date
#1 1 2014-01-01
#2 2 2014-02-01
#3 3 2014-03-01
data\u frame我将为季度创建一个新变量
data_frame$quarter <- quarters(data_frame$launch_date)
使用@thelatemail数据:
data_frame
id launch_date quarter
1 1 2014-01-01 Q1
2 2 2014-02-01 Q1
3 3 2014-03-01 Q1
4 4 2014-04-01 Q2
5 5 2014-05-01 Q2
subset(data_frame,quarter=='Q1')
id launch_date quarter
1 1 2014-01-01 Q1
2 2 2014-02-01 Q1
3 3 2014-03-01 Q1
我将为季度创建一个新变量
data_frame$quarter <- quarters(data_frame$launch_date)
使用@thelatemail数据:
data_frame
id launch_date quarter
1 1 2014-01-01 Q1
2 2 2014-02-01 Q1
3 3 2014-03-01 Q1
4 4 2014-04-01 Q2
5 5 2014-05-01 Q2
subset(data_frame,quarter=='Q1')
id launch_date quarter
1 1 2014-01-01 Q1
2 2 2014-02-01 Q1
3 3 2014-03-01 Q1
您很接近,但您需要学习如何正确地对数据进行子集划分
几点意见:不要使用子集
。这是可行的,但你应该习惯于更“R”的方式。使用[
。其次,如果函数的参数是Date
,则不需要专门调用format.Date
;只需调用format
,R就会为您选择正确的函数
因此,函数不起作用的原因是,您与的字符类型比较接近,但您需要学习如何正确地对数据进行子集划分
几点意见:不要使用子集
。这是可行的,但你应该习惯于更“R”的方式。使用[
。其次,如果函数的参数是Date
,则不需要专门调用format.Date
;只需调用format
,R就会为您选择正确的函数
因此,函数不起作用的原因是,您将character
类型与Uselubridate::quarter
进行了比较。此外,您只需收紧术语,就可以确保dates列为“Date”类,这很好,但时间序列是它自己的类,而不是您所拥有的。使用lubridate::quarter
。此外,只要收紧术语,您就可以确保dates列是“日期”类,这很好,但时间序列是它自己的类,而不是你所拥有的。我想问题是关于@latemail实际上==1
,以季度为单位。谢谢你捕捉!我想问题是关于@latemail实际上==1
,以季度为单位。谢谢捕捉!或者一步到位子集(数据帧,季度(启动日期)=“Q1”)
或一步到位子集(数据帧,季度(启动日期)=“Q1”)
“您正在与字符类型进行比较,尽管它可能会导致填充,例如“05”
的确,我会避免它。但是,它清楚地表明,我无法重现OP的错误。我也不知道错误是什么。但是这种方法似乎有效!谢谢!“您将其与字符类型进行比较,尽管它会导致填充,例如“05”
的确,我会避免它。但是,它清楚地表明我不能重现OP的错误。我也不知道错误是什么。但是这种方法似乎有效!谢谢!
# 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)
data_frame[as.numeric(format(data_frame$launch_date, "%m"))<=3,]
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
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