Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中创建季度子集_R_Date - Fatal编程技术网

在R中创建季度子集

在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\

我有一个数据框架,里面有一年的时间数据。它还有其他数据,如名称、金额和日期。我想将数据框架分为年度季度,以测量相应季度的某些方面。例如,我只想查看1月、2月和3月的收入

我已确保dates列是一个时间序列:

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
类型与
Use
lubridate::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