R 基于日期范围的子集
我有一个数据集(许多玩家都有玩家姓名、一些玩家评级和评级发布日期,例如R 基于日期范围的子集,r,subset,R,Subset,我有一个数据集(许多玩家都有玩家姓名、一些玩家评级和评级发布日期,例如 Player date overall_rating Aaron Cresswell 4/21/2016 74 Aaron Cresswell 12/5/2014 71 Aaron Cresswell 11/7/2014 71 Aaron Cresswell 9/18/2014 70 Aaron Cresswell 5/2/2014 70 A
Player date overall_rating
Aaron Cresswell 4/21/2016 74
Aaron Cresswell 12/5/2014 71
Aaron Cresswell 11/7/2014 71
Aaron Cresswell 9/18/2014 70
Aaron Cresswell 5/2/2014 70
Aaron Cresswell 4/4/2014 70
Aaron Cresswell 3/14/2014 70
Aaron Cresswell 12/13/2013 70
Aaron Cresswell 11/8/2013 70
Aaron Cresswell 10/4/2013 69
Aaron Cresswell 9/20/2013 69
Aaron Cresswell 5/3/2013 69
Aaron Cresswell 3/22/2013 69
Aaron Cresswell 3/15/2013 69
Aaron Cresswell 2/22/2013 69
Aaron Cresswell 2/15/2013 69
Aaron Cresswell 8/31/2012 68
Aaron Cresswell 2/22/2012 65
Aaron Cresswell 8/30/2011 64
Aaron Cresswell 8/30/2010 54
Aaron Cresswell 2/22/2010 51
Aaron Cresswell 8/30/2009 52
Aaron Cresswell 2/22/2009 47
Aaron Cresswell 8/30/2008 53
Aaron Cresswell 2/22/2007 53
Aaron Doran 1/7/2016 65
Aaron Doran 10/9/2015 66
Aaron Doran 9/21/2015 66
Aaron Doran 12/12/2014 67
Aaron Doran 9/18/2014 68
Aaron Doran 4/18/2014 68
Aaron Doran 3/14/2014 68
Aaron Doran 1/31/2014 69
Aaron Doran 11/29/2013 70
Aaron Doran 9/20/2013 71
Aaron Doran 5/31/2013 70
Aaron Doran 4/26/2013 70
Aaron Doran 4/19/2013 70
Aaron Doran 4/5/2013 70
Aaron Doran 3/22/2013 69
Aaron Doran 3/8/2013 69
Aaron Doran 2/15/2013 69
Aaron Doran 8/31/2012 65
Aaron Doran 2/22/2012 65
Aaron Doran 8/30/2011 65
Aaron Doran 2/22/2011 67
Aaron Doran 8/30/2010 67
Aaron Doran 2/22/2010 65
Aaron Doran 8/30/2009 65
Aaron Doran 2/22/2009 59
Aaron Doran 2/22/2007 59
Aaron Hughes 12/24/2015 70
Aaron Hughes 9/21/2015 70
Aaron Hughes 5/8/2015 69
Aaron Hughes 4/10/2015 69
Aaron Hughes 3/20/2015 70
Aaron Hughes 9/18/2014 72
Aaron Hughes 1/31/2014 72
Aaron Hughes 1/17/2014 72
Aaron Hughes 9/20/2013 73
Aaron Hughes 5/10/2013 73
Aaron Hughes 4/26/2013 74
Aaron Hughes 3/22/2013 74
Aaron Hughes 3/8/2013 74
Aaron Hughes 2/15/2013 74
Aaron Hughes 8/31/2012 74
Aaron Hughes 2/22/2012 75
我的问题是:如何做到这一点:如果日期介于(例如,2006年8月1日至2007年5月30日)之间,则在名为“季节”的新列中应显示“2006/2007”。由于一名球员可以在一个赛季中发布多个评级,因此我希望每个球员只保留每个赛季的最后一个评级。您可以使用lubridate:
library(lubridate)
library(data.table)
start_date<-ymd("2006/08/01")
end_date<-ymd("2007/05/30")
最后,您可以通过以下方式添加季节:
df$Season <-ifelse(between(df$date,start_date,end_date),paste0(year(start_date),"/",year(end_date)),"")
>df
player date rating Season
1 player1 2006-09-12 a 2006/2007
2 player1 2007-08-01 b
3 player2 2007-07-03 c
您可以使用lubridate:
library(lubridate)
library(data.table)
start_date<-ymd("2006/08/01")
end_date<-ymd("2007/05/30")
最后,您可以通过以下方式添加季节:
df$Season <-ifelse(between(df$date,start_date,end_date),paste0(year(start_date),"/",year(end_date)),"")
>df
player date rating Season
1 player1 2006-09-12 a 2006/2007
2 player1 2007-08-01 b
3 player2 2007-07-03 c
下面是如何使用
dplyr
和lubridate
来实现这一点。基本上,您希望创建一个季节列。如果评级的月
小于或等于5,您希望季节为年-1/年。否则,季节将为年/年=+1。然后,您可以进行分组按
球员和赛季进行分组,并使用切片(n())选择最后一次评级
library(dplyr);library(lubridate)
df%>%
突变(日期=as.date(日期,“%m/%d/%Y”),
季节=ifelse(月(日)%
安排(日期)%>%
分组依据(球员、赛季)%>%
切片(n())
球员日期总评分季节
1 Aaron Cresswell 2007-02-22 53 2006/2007
2 Aaron Cresswell 2009-02-22 47 2008/2009
3 Aaron Cresswell 2010-02-22 51 2009/2010
4亚伦·克雷斯韦尔2010-08-30 54 2010/2011
5 Aaron Cresswell 2012-02-22 65 2011/2012
6 Aaron Cresswell 2013-05-03 69 2012/2013
7 Aaron Cresswell 2014-05-02 70 2013/2014
8 Aaron Cresswell 2014-12-05 71 2014/2015
9 Aaron Cresswell 2016-04-21 74 2015/2016
10亚伦·多兰2007-02-22 59 2006/2007
11亚伦·多兰2009-02-22 59 2008/2009
12亚伦·多兰2010-02-22 65 2009/2010
13亚伦·多兰2011-02-22 67 2010/2011
14亚伦·多兰2012-02-22 65 2011/2012
15亚伦·多兰2013-05-31 70 2012/2013
16亚伦·多兰2014-04-18 68 2013/2014
17亚伦·多兰2014-12-12 67 2014/2015
18亚伦·多兰2016-01-07 65 2015/2016
19亚伦休斯2012-02-22 75 2011/2012
20 Aaron Hughes 2013-05-10 73 2012/2013
21亚伦休斯2014-01-31 72 2013/2014
22亚伦休斯2015-05-08 69 2014/2015
23亚伦休斯2015-12-24 70 2015/2016
数据
df <- read.table(text='Player date overall_rating
"Aaron Cresswell" 4/21/2016 74
"Aaron Cresswell" 12/5/2014 71
"Aaron Cresswell" 11/7/2014 71
"Aaron Cresswell" 9/18/2014 70
"Aaron Cresswell" 5/2/2014 70
"Aaron Cresswell" 4/4/2014 70
"Aaron Cresswell" 3/14/2014 70
"Aaron Cresswell" 12/13/2013 70
"Aaron Cresswell" 11/8/2013 70
"Aaron Cresswell" 10/4/2013 69
"Aaron Cresswell" 9/20/2013 69
"Aaron Cresswell" 5/3/2013 69
"Aaron Cresswell" 3/22/2013 69
"Aaron Cresswell" 3/15/2013 69
"Aaron Cresswell" 2/22/2013 69
"Aaron Cresswell" 2/15/2013 69
"Aaron Cresswell" 8/31/2012 68
"Aaron Cresswell" 2/22/2012 65
"Aaron Cresswell" 8/30/2011 64
"Aaron Cresswell" 8/30/2010 54
"Aaron Cresswell" 2/22/2010 51
"Aaron Cresswell" 8/30/2009 52
"Aaron Cresswell" 2/22/2009 47
"Aaron Cresswell" 8/30/2008 53
"Aaron Cresswell" 2/22/2007 53
"Aaron Doran" 1/7/2016 65
"Aaron Doran" 10/9/2015 66
"Aaron Doran" 9/21/2015 66
"Aaron Doran" 12/12/2014 67
"Aaron Doran" 9/18/2014 68
"Aaron Doran" 4/18/2014 68
"Aaron Doran" 3/14/2014 68
"Aaron Doran" 1/31/2014 69
"Aaron Doran" 11/29/2013 70
"Aaron Doran" 9/20/2013 71
"Aaron Doran" 5/31/2013 70
"Aaron Doran" 4/26/2013 70
"Aaron Doran" 4/19/2013 70
"Aaron Doran" 4/5/2013 70
"Aaron Doran" 3/22/2013 69
"Aaron Doran" 3/8/2013 69
"Aaron Doran" 2/15/2013 69
"Aaron Doran" 8/31/2012 65
"Aaron Doran" 2/22/2012 65
"Aaron Doran" 8/30/2011 65
"Aaron Doran" 2/22/2011 67
"Aaron Doran" 8/30/2010 67
"Aaron Doran" 2/22/2010 65
"Aaron Doran" 8/30/2009 65
"Aaron Doran" 2/22/2009 59
"Aaron Doran" 2/22/2007 59
"Aaron Hughes" 12/24/2015 70
"Aaron Hughes" 9/21/2015 70
"Aaron Hughes" 5/8/2015 69
"Aaron Hughes" 4/10/2015 69
"Aaron Hughes" 3/20/2015 70
"Aaron Hughes" 9/18/2014 72
"Aaron Hughes" 1/31/2014 72
"Aaron Hughes" 1/17/2014 72
"Aaron Hughes" 9/20/2013 73
"Aaron Hughes" 5/10/2013 73
"Aaron Hughes" 4/26/2013 74
"Aaron Hughes" 3/22/2013 74
"Aaron Hughes" 3/8/2013 74
"Aaron Hughes" 2/15/2013 74
"Aaron Hughes" 8/31/2012 74
"Aaron Hughes" 2/22/2012 75',header=TRUE,stringsAsFactors=FALSE)
df下面是如何使用dplyr
和lubridate
来实现这一点。基本上,您希望创建一个季节列。如果评级的月
小于或等于5,您希望季节为年-1/年。否则,季节将为年年/年=+1。然后,您可以<代码>按球员和赛季分组,并使用slice(n())
library(dplyr);library(lubridate)
df%>%
突变(日期=as.date(日期,“%m/%d/%Y”),
季节=ifelse(月(日)%
安排(日期)%>%
分组依据(球员、赛季)%>%
切片(n())
球员日期总评分季节
1 Aaron Cresswell 2007-02-22 53 2006/2007
2 Aaron Cresswell 2009-02-22 47 2008/2009
3 Aaron Cresswell 2010-02-22 51 2009/2010
4亚伦·克雷斯韦尔2010-08-30 54 2010/2011
5 Aaron Cresswell 2012-02-22 65 2011/2012
6 Aaron Cresswell 2013-05-03 69 2012/2013
7 Aaron Cresswell 2014-05-02 70 2013/2014
8 Aaron Cresswell 2014-12-05 71 2014/2015
9 Aaron Cresswell 2016-04-21 74 2015/2016
10亚伦·多兰2007-02-22 59 2006/2007
11亚伦·多兰2009-02-22 59 2008/2009
12亚伦·多兰2010-02-22 65 2009/2010
13亚伦·多兰2011-02-22 67 2010/2011
14亚伦·多兰2012-02-22 65 2011/2012
15亚伦·多兰2013-05-31 70 2012/2013
16亚伦·多兰2014-04-18 68 2013/2014
17亚伦·多兰2014-12-12 67 2014/2015
18亚伦·多兰2016-01-07 65 2015/2016
19亚伦休斯2012-02-22 75 2011/2012
20 Aaron Hughes 2013-05-10 73 2012/2013
21亚伦休斯2014-01-31 72 2013/2014
22亚伦休斯2015-05-08 69 2014/2015
23亚伦休斯2015-12-24 70 2015/2016
数据
df <- read.table(text='Player date overall_rating
"Aaron Cresswell" 4/21/2016 74
"Aaron Cresswell" 12/5/2014 71
"Aaron Cresswell" 11/7/2014 71
"Aaron Cresswell" 9/18/2014 70
"Aaron Cresswell" 5/2/2014 70
"Aaron Cresswell" 4/4/2014 70
"Aaron Cresswell" 3/14/2014 70
"Aaron Cresswell" 12/13/2013 70
"Aaron Cresswell" 11/8/2013 70
"Aaron Cresswell" 10/4/2013 69
"Aaron Cresswell" 9/20/2013 69
"Aaron Cresswell" 5/3/2013 69
"Aaron Cresswell" 3/22/2013 69
"Aaron Cresswell" 3/15/2013 69
"Aaron Cresswell" 2/22/2013 69
"Aaron Cresswell" 2/15/2013 69
"Aaron Cresswell" 8/31/2012 68
"Aaron Cresswell" 2/22/2012 65
"Aaron Cresswell" 8/30/2011 64
"Aaron Cresswell" 8/30/2010 54
"Aaron Cresswell" 2/22/2010 51
"Aaron Cresswell" 8/30/2009 52
"Aaron Cresswell" 2/22/2009 47
"Aaron Cresswell" 8/30/2008 53
"Aaron Cresswell" 2/22/2007 53
"Aaron Doran" 1/7/2016 65
"Aaron Doran" 10/9/2015 66
"Aaron Doran" 9/21/2015 66
"Aaron Doran" 12/12/2014 67
"Aaron Doran" 9/18/2014 68
"Aaron Doran" 4/18/2014 68
"Aaron Doran" 3/14/2014 68
"Aaron Doran" 1/31/2014 69
"Aaron Doran" 11/29/2013 70
"Aaron Doran" 9/20/2013 71
"Aaron Doran" 5/31/2013 70
"Aaron Doran" 4/26/2013 70
"Aaron Doran" 4/19/2013 70
"Aaron Doran" 4/5/2013 70
"Aaron Doran" 3/22/2013 69
"Aaron Doran" 3/8/2013 69
"Aaron Doran" 2/15/2013 69
"Aaron Doran" 8/31/2012 65
"Aaron Doran" 2/22/2012 65
"Aaron Doran" 8/30/2011 65
"Aaron Doran" 2/22/2011 67
"Aaron Doran" 8/30/2010 67
"Aaron Doran" 2/22/2010 65
"Aaron Doran" 8/30/2009 65
"Aaron Doran" 2/22/2009 59
"Aaron Doran" 2/22/2007 59
"Aaron Hughes" 12/24/2015 70
"Aaron Hughes" 9/21/2015 70
"Aaron Hughes" 5/8/2015 69
"Aaron Hughes" 4/10/2015 69
"Aaron Hughes" 3/20/2015 70
"Aaron Hughes" 9/18/2014 72
"Aaron Hughes" 1/31/2014 72
"Aaron Hughes" 1/17/2014 72
"Aaron Hughes" 9/20/2013 73
"Aaron Hughes" 5/10/2013 73
"Aaron Hughes" 4/26/2013 74
"Aaron Hughes" 3/22/2013 74
"Aaron Hughes" 3/8/2013 74
"Aaron Hughes" 2/15/2013 74
"Aaron Hughes" 8/31/2012 74
"Aaron Hughes" 2/22/2012 75',header=TRUE,stringsAsFactors=FALSE)
df请添加一些数据以获得人们的关注请添加一些数据以获得人们的关注你好,amonk,我感谢你的回答。但它似乎不起作用,它返回的只是“”我很感激它现在能起作用。我还有一个问题:我的日期是从2006年到2016年,也就是说,我应该简单地循环2006:2016来获得2006/2007……2015/2016赛季?谢谢you@dede请添加所有数据以便我们可以查看我添加了更多数据,也许这可以helpfull@dede我编辑了代码。请随意选择答案你好,我知道吃了你的答案。但它似乎不起作用,它只返回“”我很感激它现在能起作用。我还有一个问题:我的日期是从2006年到2016年,也就是说,我应该简单地循环2006:2016来获得2006/2007……2015/2016赛季?谢谢you@dede请添加所有数据以便我们可以查看我添加了更多数据,也许这可以helpfull@dede我编辑了代码。请随意选择我欣赏的答案这似乎是可行的,它解决了我的问题。我有一个问题,如何将它保存为一个新变量,因为当我查看df时,它显示了初始数据集?P Lapointe我添加了%>%data.frame()->df1,现在它似乎起作用了。再次感谢。P点我很感激。它似乎起作用了,它解决了我的问题。我有一个问题,如何将它保存为
df <- read.table(text='Player date overall_rating
"Aaron Cresswell" 4/21/2016 74
"Aaron Cresswell" 12/5/2014 71
"Aaron Cresswell" 11/7/2014 71
"Aaron Cresswell" 9/18/2014 70
"Aaron Cresswell" 5/2/2014 70
"Aaron Cresswell" 4/4/2014 70
"Aaron Cresswell" 3/14/2014 70
"Aaron Cresswell" 12/13/2013 70
"Aaron Cresswell" 11/8/2013 70
"Aaron Cresswell" 10/4/2013 69
"Aaron Cresswell" 9/20/2013 69
"Aaron Cresswell" 5/3/2013 69
"Aaron Cresswell" 3/22/2013 69
"Aaron Cresswell" 3/15/2013 69
"Aaron Cresswell" 2/22/2013 69
"Aaron Cresswell" 2/15/2013 69
"Aaron Cresswell" 8/31/2012 68
"Aaron Cresswell" 2/22/2012 65
"Aaron Cresswell" 8/30/2011 64
"Aaron Cresswell" 8/30/2010 54
"Aaron Cresswell" 2/22/2010 51
"Aaron Cresswell" 8/30/2009 52
"Aaron Cresswell" 2/22/2009 47
"Aaron Cresswell" 8/30/2008 53
"Aaron Cresswell" 2/22/2007 53
"Aaron Doran" 1/7/2016 65
"Aaron Doran" 10/9/2015 66
"Aaron Doran" 9/21/2015 66
"Aaron Doran" 12/12/2014 67
"Aaron Doran" 9/18/2014 68
"Aaron Doran" 4/18/2014 68
"Aaron Doran" 3/14/2014 68
"Aaron Doran" 1/31/2014 69
"Aaron Doran" 11/29/2013 70
"Aaron Doran" 9/20/2013 71
"Aaron Doran" 5/31/2013 70
"Aaron Doran" 4/26/2013 70
"Aaron Doran" 4/19/2013 70
"Aaron Doran" 4/5/2013 70
"Aaron Doran" 3/22/2013 69
"Aaron Doran" 3/8/2013 69
"Aaron Doran" 2/15/2013 69
"Aaron Doran" 8/31/2012 65
"Aaron Doran" 2/22/2012 65
"Aaron Doran" 8/30/2011 65
"Aaron Doran" 2/22/2011 67
"Aaron Doran" 8/30/2010 67
"Aaron Doran" 2/22/2010 65
"Aaron Doran" 8/30/2009 65
"Aaron Doran" 2/22/2009 59
"Aaron Doran" 2/22/2007 59
"Aaron Hughes" 12/24/2015 70
"Aaron Hughes" 9/21/2015 70
"Aaron Hughes" 5/8/2015 69
"Aaron Hughes" 4/10/2015 69
"Aaron Hughes" 3/20/2015 70
"Aaron Hughes" 9/18/2014 72
"Aaron Hughes" 1/31/2014 72
"Aaron Hughes" 1/17/2014 72
"Aaron Hughes" 9/20/2013 73
"Aaron Hughes" 5/10/2013 73
"Aaron Hughes" 4/26/2013 74
"Aaron Hughes" 3/22/2013 74
"Aaron Hughes" 3/8/2013 74
"Aaron Hughes" 2/15/2013 74
"Aaron Hughes" 8/31/2012 74
"Aaron Hughes" 2/22/2012 75',header=TRUE,stringsAsFactors=FALSE)