2014-12-18 60 views
0

我无法通过ifelse语句获得预期结果,该语句用于将大学数据解析为在学期内/期间内/学期间断开,在数据框中创建一个新列refstats$Semester调试我的ifelse语句时遇到问题

下面是一些样本数据和我的部分代码,我想/希望的问题是:

Date<-c('2009-04-12','2009-07-07','2009-08-09','2009-08-20','2009-08-25','2009-08-30','2020-09-03','2009-09-07','2009-11-15','2009-11-22','2009-12-05','2009-12-12','2010-01-02','2010-01-18','2010-02-14','2010-03-22','2010-05-23','2010-06-13','2010-06-19','2010-08-08','2010-09-05','2010-12-09','2011-03-27','2011-08-06','2011-12-09','2012-06-10','2013-01-20','2013-01-21','2013-05-10','2013-08-03','2013-12-14','2014-05-22','2015-03-20','2015-08-20','2015-11-30','2015-12-15','2016-01-10','2016-02-15') 

# create data frame 
refstats<-data.frame(Date) 

# convert Date to a Date object for evaluation in nested ifelse statement 
refstats$Date <- as.Date(refstats$Date, format = '%Y-%m-%d') 

# ---- determine Semester, broken up into school year ifelse statments 
# because R gets confused if the ifelse is too deeply nested. 

# dummvar is just something to do in the final else condition, so it doesn't 
# overwrite the correct Semester once it is found. 

# 2009-2010 
ifelse(refstats$Date >= as.Date("2009-08-24") & refstats$Date <= as.Date("2009-09-06"), refstats$Semester<-"Fall" , 
    ifelse(refstats$Date >= as.Date("2009-09-07") & refstats$Date <= as.Date("2009-09-07"), refstats$Semester<-"Labor Day" , 
    ifelse(refstats$Date >= as.Date("2009-09-08") & refstats$Date <= as.Date("2009-11-20"), refstats$Semester<-"Fall" , 
    ifelse(refstats$Date >= as.Date("2009-11-21") & refstats$Date <= as.Date("2009-11-29"), refstats$Semester<-"Fall Break" , 
    ifelse(refstats$Date >= as.Date("2009-11-30") & refstats$Date <= as.Date("2009-12-10"), refstats$Semester<-"Fall" , 
    ifelse(refstats$Date >= as.Date("2009-12-11") & refstats$Date <= as.Date("2009-12-18"), refstats$Semester<-"Fall Finals" , 
    ifelse(refstats$Date >= as.Date("2009-12-19") & refstats$Date <= as.Date("2010-01-18"), refstats$Semester<-"Winter Break" , 
    ifelse(refstats$Date >= as.Date("2010-01-19") & refstats$Date <= as.Date("2010-03-19"), refstats$Semester<-"Spring" , 
    ifelse(refstats$Date >= as.Date("2010-03-20") & refstats$Date <= as.Date("2010-03-28"), refstats$Semester<-"Spring Break" , 
    ifelse(refstats$Date >= as.Date("2010-03-29") & refstats$Date <= as.Date("2010-05-06"), refstats$Semester<-"Spring" , 
    ifelse(refstats$Date >= as.Date("2010-05-07") & refstats$Date <= as.Date("2010-05-14"), refstats$Semester<-"Spring Finals" , 
    ifelse(refstats$Date >= as.Date("2010-05-15") & refstats$Date <= as.Date("2010-05-16"), refstats$Semester<-"Closed" , 
    ifelse(refstats$Date >= as.Date("2010-05-17") & refstats$Date <= as.Date("2010-06-12"), refstats$Semester<-"Summer I" , 
    ifelse(refstats$Date >= as.Date("2010-06-13") & refstats$Date <= as.Date("2010-06-13"), refstats$Semester<-"Closed" , 
    ifelse(refstats$Date >= as.Date("2010-06-14") & refstats$Date <= as.Date("2010-08-07"), refstats$Semester<-"Summer II" , 
    ifelse(refstats$Date >= as.Date("2010-08-08") & refstats$Date <= as.Date("2010-08-22"), refstats$Semester<-"Summer Break" , 
    dummvar<-NA)))))))))))))))) 

# 2010-2011 
ifelse(refstats$Date >= as.Date("2010-08-23") & refstats$Date <= as.Date("2010-09-05"), refstats$Semester<-"Fall" , 
    ifelse(refstats$Date >= as.Date("2010-09-06") & refstats$Date <= as.Date("2010-09-06"), refstats$Semester<-"Labor Day" , 
    ifelse(refstats$Date >= as.Date("2010-09-07") & refstats$Date <= as.Date("2010-11-19"), refstats$Semester<-"Fall" , 
    ifelse(refstats$Date >= as.Date("2010-11-20") & refstats$Date <= as.Date("2010-11-28"), refstats$Semester<-"Fall Break" , 
    ifelse(refstats$Date >= as.Date("2010-11-29") & refstats$Date <= as.Date("2010-12-09"), refstats$Semester<-"Fall" , 
    ifelse(refstats$Date >= as.Date("2010-12-10") & refstats$Date <= as.Date("2010-12-17"), refstats$Semester<-"Fall Finals" , 
    ifelse(refstats$Date >= as.Date("2010-12-18") & refstats$Date <= as.Date("2011-01-17"), refstats$Semester<-"Winter Break" , 
    ifelse(refstats$Date >= as.Date("2011-01-18") & refstats$Date <= as.Date("2011-03-18"), refstats$Semester<-"Spring" , 
    ifelse(refstats$Date >= as.Date("2011-03-19") & refstats$Date <= as.Date("2011-03-27"), refstats$Semester<-"Spring Break" , 
    ifelse(refstats$Date >= as.Date("2011-03-28") & refstats$Date <= as.Date("2011-05-05"), refstats$Semester<-"Spring" , 
    ifelse(refstats$Date >= as.Date("2011-05-06") & refstats$Date <= as.Date("2011-05-13"), refstats$Semester<-"Spring Finals" , 
    ifelse(refstats$Date >= as.Date("2011-05-14") & refstats$Date <= as.Date("2011-05-15"), refstats$Semester<-"Closed" , 
    ifelse(refstats$Date >= as.Date("2011-05-16") & refstats$Date <= as.Date("2011-06-11"), refstats$Semester<-"Summer I" , 
    ifelse(refstats$Date >= as.Date("2011-06-12") & refstats$Date <= as.Date("2011-06-12"), refstats$Semester<-"Closed" , 
    ifelse(refstats$Date >= as.Date("2011-06-13") & refstats$Date <= as.Date("2011-08-06"), refstats$Semester<-"Summer II" , 
    ifelse(refstats$Date >= as.Date("2011-08-07") & refstats$Date <= as.Date("2011-08-21"), refstats$Semester<-"Summer Break" , 
    dummvar<-NA)))))))))))))))) 

# 2011-2012 
ifelse(refstats$Date >= as.Date("2011-08-22") & refstats$Date <= as.Date("2011-09-04"), refstats$Semester<-"Fall" , 
    ifelse(refstats$Date >= as.Date("2011-09-05") & refstats$Date <= as.Date("2011-09-05"), refstats$Semester<-"Labor Day" , 
    ifelse(refstats$Date >= as.Date("2011-09-06") & refstats$Date <= as.Date("2011-11-18"), refstats$Semester<-"Fall" , 
    ifelse(refstats$Date >= as.Date("2011-11-19") & refstats$Date <= as.Date("2011-11-27"), refstats$Semester<-"Fall Break" , 
    ifelse(refstats$Date >= as.Date("2011-11-28") & refstats$Date <= as.Date("2011-12-08"), refstats$Semester<-"Fall" , 
    ifelse(refstats$Date >= as.Date("2011-12-09") & refstats$Date <= as.Date("2011-12-16"), refstats$Semester<-"Fall Finals" , 
    ifelse(refstats$Date >= as.Date("2011-12-17") & refstats$Date <= as.Date("2012-01-16"), refstats$Semester<-"Winter Break" , 
    ifelse(refstats$Date >= as.Date("2012-01-17") & refstats$Date <= as.Date("2012-03-16"), refstats$Semester<-"Spring" , 
    ifelse(refstats$Date >= as.Date("2012-03-17") & refstats$Date <= as.Date("2012-03-25"), refstats$Semester<-"Spring Break" , 
    ifelse(refstats$Date >= as.Date("2012-03-26") & refstats$Date <= as.Date("2012-05-03"), refstats$Semester<-"Spring" , 
    ifelse(refstats$Date >= as.Date("2012-05-04") & refstats$Date <= as.Date("2012-05-11"), refstats$Semester<-"Spring Finals" , 
    ifelse(refstats$Date >= as.Date("2012-05-12") & refstats$Date <= as.Date("2012-05-13"), refstats$Semester<-"Closed" , 
    ifelse(refstats$Date >= as.Date("2012-05-15") & refstats$Date <= as.Date("2012-06-09"), refstats$Semester<-"Summer I" , 
    ifelse(refstats$Date >= as.Date("2012-06-10") & refstats$Date <= as.Date("2012-06-10"), refstats$Semester<-"Closed" , 
    ifelse(refstats$Date >= as.Date("2012-06-11") & refstats$Date <= as.Date("2012-08-04"), refstats$Semester<-"Summer II" , 
    ifelse(refstats$Date >= as.Date("2012-08-05") & refstats$Date <= as.Date("2012-08-26"), refstats$Semester<-"Summer Break" , 
    dummvar<-NA)))))))))))))))) 

# 2012-2013 note this year has MLK day within Spring Semester 
ifelse(refstats$Date >= as.Date("2012-08-27") & refstats$Date <= as.Date("2012-09-02"), refstats$Semester<-"Fall" , 
    ifelse(refstats$Date >= as.Date("2012-09-03") & refstats$Date <= as.Date("2012-09-03"), refstats$Semester<-"Labor Day" , 
    ifelse(refstats$Date >= as.Date("2012-09-04") & refstats$Date <= as.Date("2012-11-16"), refstats$Semester<-"Fall" , 
    ifelse(refstats$Date >= as.Date("2012-11-17") & refstats$Date <= as.Date("2012-11-25"), refstats$Semester<-"Fall Break" , 
    ifelse(refstats$Date >= as.Date("2012-11-26") & refstats$Date <= as.Date("2012-12-13"), refstats$Semester<-"Fall" , 
    ifelse(refstats$Date >= as.Date("2012-12-14") & refstats$Date <= as.Date("2012-12-20"), refstats$Semester<-"Fall Finals" , 
    ifelse(refstats$Date >= as.Date("2012-12-21") & refstats$Date <= as.Date("2013-01-13"), refstats$Semester<-"Winter Break" , 
    ifelse(refstats$Date >= as.Date("2013-01-14") & refstats$Date <= as.Date("2013-01-20"), refstats$Semester<-"Spring" , 
    ifelse(refstats$Date >= as.Date("2013-01-21") & refstats$Date <= as.Date("2013-01-21"), refstats$Semester<-"MLK Day" , 
    ifelse(refstats$Date >= as.Date("2013-01-22") & refstats$Date <= as.Date("2013-03-15"), refstats$Semester<-"Spring" , 
    ifelse(refstats$Date >= as.Date("2013-03-16") & refstats$Date <= as.Date("2013-03-24"), refstats$Semester<-"Spring Break" , 
    ifelse(refstats$Date >= as.Date("2013-03-25") & refstats$Date <= as.Date("2013-05-02"), refstats$Semester<-"Spring" , 
    ifelse(refstats$Date >= as.Date("2013-05-03") & refstats$Date <= as.Date("2013-05-10"), refstats$Semester<-"Spring Finals" , 
    ifelse(refstats$Date >= as.Date("2013-05-11") & refstats$Date <= as.Date("2013-05-12"), refstats$Semester<-"Closed" , 
    ifelse(refstats$Date >= as.Date("2013-05-13") & refstats$Date <= as.Date("2013-06-08"), refstats$Semester<-"Summer I" , 
    ifelse(refstats$Date >= as.Date("2013-06-09") & refstats$Date <= as.Date("2013-06-09"), refstats$Semester<-"Closed" , 
    ifelse(refstats$Date >= as.Date("2013-06-10") & refstats$Date <= as.Date("2013-08-03"), refstats$Semester<-"Summer II" , 
    ifelse(refstats$Date >= as.Date("2013-08-04") & refstats$Date <= as.Date("2013-08-25"), refstats$Semester<-"Summer Break" , 
    dummvar<-NA)))))))))))))))))) 

# 2013-2014 
ifelse(refstats$Date >= as.Date("2013-08-26") & refstats$Date <= as.Date("2013-09-01"), refstats$Semester<-"Fall" , 
    ifelse(refstats$Date >= as.Date("2013-09-02") & refstats$Date <= as.Date("2013-09-02"), refstats$Semester<-"Labor Day" , 
    ifelse(refstats$Date >= as.Date("2013-09-03") & refstats$Date <= as.Date("2013-11-22"), refstats$Semester<-"Fall" , 
    ifelse(refstats$Date >= as.Date("2013-11-23") & refstats$Date <= as.Date("2013-12-01"), refstats$Semester<-"Fall Break" , 
    ifelse(refstats$Date >= as.Date("2013-12-02") & refstats$Date <= as.Date("2013-12-12"), refstats$Semester<-"Fall" , 
    ifelse(refstats$Date >= as.Date("2013-12-13") & refstats$Date <= as.Date("2013-12-20"), refstats$Semester<-"Fall Finals" , 
    ifelse(refstats$Date >= as.Date("2013-12-21") & refstats$Date <= as.Date("2014-01-20"), refstats$Semester<-"Winter Break" , 
    ifelse(refstats$Date >= as.Date("2014-01-21") & refstats$Date <= as.Date("2014-03-21"), refstats$Semester<-"Spring" , 
    ifelse(refstats$Date >= as.Date("2014-03-22") & refstats$Date <= as.Date("2014-03-30"), refstats$Semester<-"Spring Break" , 
    ifelse(refstats$Date >= as.Date("2014-03-31") & refstats$Date <= as.Date("2014-05-08"), refstats$Semester<-"Spring" , 
    ifelse(refstats$Date >= as.Date("2014-05-09") & refstats$Date <= as.Date("2014-05-16"), refstats$Semester<-"Spring Finals" , 
    ifelse(refstats$Date >= as.Date("2014-05-17") & refstats$Date <= as.Date("2014-05-18"), refstats$Semester<-"Closed" , 
    ifelse(refstats$Date >= as.Date("2014-05-19") & refstats$Date <= as.Date("2014-06-14"), refstats$Semester<-"Summer I" , 
    ifelse(refstats$Date >= as.Date("2014-06-15") & refstats$Date <= as.Date("2014-06-15"), refstats$Semester<-"Closed" , 
    ifelse(refstats$Date >= as.Date("2014-06-16") & refstats$Date <= as.Date("2014-08-09"), refstats$Semester<-"Summer II" , 
    ifelse(refstats$Date >= as.Date("2014-08-10") & refstats$Date <= as.Date("2014-08-24"), refstats$Semester<-"Summer Break" , 
    dummvar<-NA)))))))))))))))) 

# 2014-2015 
ifelse(refstats$Date >= as.Date("2014-08-25") & refstats$Date <= as.Date("2014-08-31"), refstats$Semester<-"Fall" , 
    ifelse(refstats$Date >= as.Date("2014-09-01") & refstats$Date <= as.Date("2014-09-01"), refstats$Semester<-"Labor Day" , 
    ifelse(refstats$Date >= as.Date("2014-09-02") & refstats$Date <= as.Date("2014-11-21"), refstats$Semester<-"Fall" , 
    ifelse(refstats$Date >= as.Date("2014-11-22") & refstats$Date <= as.Date("2014-11-30"), refstats$Semester<-"Fall Break" , 
    ifelse(refstats$Date >= as.Date("2014-12-01") & refstats$Date <= as.Date("2014-12-11"), refstats$Semester<-"Fall" , 
    ifelse(refstats$Date >= as.Date("2014-12-12") & refstats$Date <= as.Date("2014-12-19"), refstats$Semester<-"Fall Finals" , 
    ifelse(refstats$Date >= as.Date("2014-12-20") & refstats$Date <= as.Date("2015-01-19"), refstats$Semester<-"Winter Break" , 
    ifelse(refstats$Date >= as.Date("2015-01-20") & refstats$Date <= as.Date("2015-03-20"), refstats$Semester<-"Spring" , 
    ifelse(refstats$Date >= as.Date("2015-03-21") & refstats$Date <= as.Date("2015-03-29"), refstats$Semester<-"Spring Break" , 
    ifelse(refstats$Date >= as.Date("2015-03-30") & refstats$Date <= as.Date("2015-05-07"), refstats$Semester<-"Spring", 
    ifelse(refstats$Date >= as.Date("2015-05-08") & refstats$Date <= as.Date("2015-05-15"), refstats$Semester<-"Spring Finals" , 
    ifelse(refstats$Date >= as.Date("2015-05-16") & refstats$Date <= as.Date("2015-05-17"), refstats$Semester<-"Closed" , 
    ifelse(refstats$Date >= as.Date("2015-05-18") & refstats$Date <= as.Date("2015-06-13"), refstats$Semester<-"Summer I" , 
    ifelse(refstats$Date >= as.Date("2015-06-14") & refstats$Date <= as.Date("2015-06-14"), refstats$Semester<-"Closed" , 
    ifelse(refstats$Date >= as.Date("2015-06-15") & refstats$Date <= as.Date("2015-08-08"), refstats$Semester<-"Summer II" , 
    ifelse(refstats$Date >= as.Date("2015-08-09") & refstats$Date <= as.Date("2015-08-23"), refstats$Semester<-"Summer Break" , 
    dummvar<-NA)))))))))))))))) 

# 2015- 
ifelse(refstats$Date >= as.Date("2015-08-24") & refstats$Date <= as.Date("2015-09-06"), refstats$Semester<-"Fall" , 
    ifelse(refstats$Date >= as.Date("2015-09-07") & refstats$Date <= as.Date("2015-09-07"), refstats$Semester<-"Labor Day" , 
    ifelse(refstats$Date >= as.Date("2015-09-08") & refstats$Date <= as.Date("2015-11-20"), refstats$Semester<-"Fall" , 
    ifelse(refstats$Date >= as.Date("2015-11-21") & refstats$Date <= as.Date("2015-11-29"), refstats$Semester<-"Fall Break" , 
    ifelse(refstats$Date >= as.Date("2015-11-30") & refstats$Date <= as.Date("2015-12-10"), refstats$Semester<-"Fall" , 
    ifelse(refstats$Date >= as.Date("2015-12-11") & refstats$Date <= as.Date("2015-12-18"), refstats$Semester<-"Fall Finals" , 
    ifelse(refstats$Date >= as.Date("2015-12-19") & refstats$Date <= as.Date("2016-01-18"), refstats$Semester<-"Winter Break" , 
    dummvar<-NA))))))) 

refstats 

我本来期望的最终声明打印的东西,看起来像:

日期学期
2009-04-12 NA
2009-07-07 NA
2009-08-09 NA
2009-08-20 NA
2009-08-25秋季
2009-08-30秋季
2020年9月3日NA
2009-09-07劳动节
2009-11-15秋季
2009-11-22跌破
2009-12-05秋季
2009-12-12秋季总决赛
2010-01-02寒假
2010-01-18寒假
2010-02-14春天
2010-03-22春假
2010-05-23夏天我
2010-06-13关闭
2010-06-19夏季II
2010-08-08暑假
2010-09-05秋季
2010-12-09秋季
2011-03-27春假
2011-08-06夏季II
2011-12-09跌破
2012-06-10夏天我
2013年1月20日春节
2013-01- 21 MLK日
2013 -05-10春季总决赛
2013年8月3日暑期II
2013-12-14秋季总决赛
2014年5月22日夏季我
2015年3月20日春季
2015年8月20日暑假
2015年11月30日秋季
2015年12月15日秋季总决赛
2016年1月10日寒假
2016年2月15日NA

相反,refstats$Semeseter是所有的 “寒假”

任何关于我如何误入歧途的想法或建议,或者对问题有更好的解决方法?我最后一个问题与此有关 - 我仍然在努力去理解。


删除了一些中间尝试解决问题,让我留在30,000 characther限制


第三次尝试,加入as.Date:

我不得不更换我的初始代码(由于要求问题的字符数限制为30,000个) - 所以新代码位于顶部,as.Date在那里。

唉!现在我又回到了“冬日休息”再次出现的一切!


第四次尝试,试图用findInterval

Date<-c('2009-04-12','2009-07-07','2009-08-09','2009-08-20','2009-08-25','2009-08-30','2020-09-03','2009-09-07','2009-11-15','2009-11-22','2009-12-05','2009-12-12','2010-01-02','2010-01-18','2010-02-14','2010-03-22','2010-05-23','2010-06-13','2010-06-19','2010-08-08','2010-09-05','2010-12-09','2011-03-27','2011-08-06','2011-12-09','2012-06-10','2013-01-20','2013-01-21','2013-05-10','2013-08-03','2013-12-14','2014-05-22','2015-03-20','2015-08-20','2015-11-30','2015-12-15','2016-01-10','2016-02-15') 

Semester<-c('NA','Fall','Labor Day','Fall','Fall Break','Fall','Fall Finals','Winter Break','Spring','Spring Break','Spring','Spring Finals','Closed','Summer I','Closed','Summer II','Summer Break','Fall','Labor Day','Fall','Fall Break','Fall','Fall Finals','Winter Break','Spring','Spring Break','Spring','Spring Finals','Closed','Summer I','Closed','Summer II','Summer Break','Fall','Labor Day','Fall','Fall Break','Fall','Fall Finals','Winter Break','Spring','Spring Break','Spring','Spring Finals','Closed','Summer I','Closed','Summer II','Summer Break','Fall','Labor Day','Fall','Fall Break','Fall','Fall Finals','Winter Break','Spring','MLK Day','Spring','Spring Break','Spring','Spring Finals','Closed','Summer I','Closed','Summer II','Summer Break','Fall','Labor Day','Fall','Fall Break','Fall','Fall Finals','Winter Break','Spring','Spring Break','Spring','Spring Finals','Closed','Summer I','Closed','Summer II','Summer Break','Fall','Labor Day','Fall','Fall Break','Fall','Fall Finals','Winter Break','Spring','Spring Break','Spring','Spring Finals','Closed','Summer I','Closed','Summer II','Summer Break','Fall','Labor Day','Fall','Fall Break','Fall','Fall Finals','Winter Break','NA') 
StartDate<-c('1000-01-01','2009-08-24','2009-09-07','2009-09-08','2009-11-21','2009-11-30','2009-12-11','2009-12-19','2010-01-19','2010-03-20','2010-03-29','2010-05-07','2010-05-15','2010-05-17','2010-06-13','2010-06-14','2010-08-08','2010-08-23','2010-09-06','2010-09-07','2010-11-20','2010-11-29','2010-12-10','2010-12-18','2011-01-18','2011-03-19','2011-03-28','2011-05-06','2011-05-14','2011-05-16','2011-06-12','2011-06-13','2011-08-07','2011-08-22','2011-09-05','2011-09-06','2011-11-19','2011-11-28','2011-12-09','2011-12-17','2012-01-17','2012-03-17','2012-03-26','2012-05-04','2012-05-12','2012-05-15','2012-06-10','2012-06-11','2012-08-05','2012-08-27','2012-09-03','2012-09-04','2012-11-17','2012-11-26','2012-12-14','2012-12-21','2013-01-14','2013-01-21','2013-01-22','2013-03-16','2013-03-25','2013-05-03','2013-05-11','2013-05-13','2013-06-09','2013-06-10','2013-08-04','2013-08-26','2013-09-02','2013-09-03','2013-11-23','2013-12-02','2013-12-13','2013-12-21','2014-01-21','2014-03-22','2014-03-31','2014-05-09','2014-05-17','2014-05-19','2014-06-15','2014-06-16','2014-08-10','2014-08-25','2014-09-01','2014-09-02','2014-11-22','2014-12-01','2014-12-12','2014-12-20','2015-01-20','2015-03-21','2015-03-30','2015-05-08','2015-05-16','2015-05-18','2015-06-14','2015-06-15','2015-08-19','2015-08-24','2015-09-07','2015-09-08','2015-11-21','2015-11-30','2015-12-11','2015-12-19','2016-01-19') 
EndDate<-c('2009-08-23','2009-09-06','2009-09-07','2009-11-20','2009-11-29','2009-12-10','2009-12-18','2010-01-18','2010-03-19','2010-03-28','2010-05-06','2010-05-14','2010-05-16','2010-06-12','2010-06-13','2010-08-07','2010-08-22','2010-09-05','2010-09-06','2010-11-19','2010-11-28','2010-12-09','2010-12-17','2011-01-17','2011-03-18','2011-03-27','2011-05-05','2011-05-13','2011-05-15','2011-06-11','2011-06-12','2011-08-06','2011-08-21','2011-09-04','2011-09-05','2011-11-18','2011-11-27','2011-12-08','2011-12-16','2012-01-16','2012-03-16','2012-03-25','2012-05-03','2012-05-11','2012-05-13','2012-06-09','2012-06-10','2012-08-04','2012-08-26','2012-09-02','2012-09-03','2012-11-16','2012-11-25','2012-12-13','2012-12-20','2013-01-13','2013-01-20','2013-01-21','2013-03-15','2013-03-24','2013-05-02','2013-05-10','2013-05-12','2013-06-08','2013-06-09','2013-08-03','2013-08-25','2013-09-01','2013-09-02','2013-11-22','2013-12-01','2013-12-12','2013-12-20','2014-01-20','2014-03-21','2014-03-30','2014-05-08','2014-05-16','2014-05-18','2014-06-14','2014-06-15','2014-08-09','2014-08-24','2014-08-31','2014-09-01','2014-11-21','2014-11-30','2014-12-11','2014-12-19','2015-01-19','2015-03-20','2015-03-29','2015-05-07','2015-05-15','2015-05-17','2015-06-13','2015-06-14','2015-08-08','2015-08-23','2015-09-06','2015-09-07','2015-11-20','2015-11-29','2015-12-10','2015-12-18','2016-01-18','3000-01-01') 


# create data frames 
refstats<-data.frame(Date) 
calendar<-data.frame(Semester,StartDate,EndDate) 

# convert Date to a Date object for evaluation in nested ifelse statement 
refstats$Date <- as.Date(refstats$Date, format = '%Y-%m-%d') 
calendar$StartDate <- as.Date(calendar$StartDate, fromat = '%Y-%m-%d') 
calendar$EndDate <- as.Date(calendar$EndDate, fromat = '%Y-%m-%d') 

# determine semester of each refstats$Date, by reference dataframe containing calendar 
# of school year dates. calendar$EndDate is not really used, because the 
# findInterval function defaults to left-closed intervals so only need to use StartDate: 
refstats$Semester <- calendar$Semester[ findInterval(refstats$Date, calendar$StartDate)] 

起初,这产生的错误消息$<-.data.frame错误(*tmp*, “学期”,值= C(2L,2L,13L ,: 替换有34行,数据有38

我的数据有一些超出范围的值,因此我添加了一个返回的开始间隔到1000年,结束时间间隔达到3000年。它的工作原理!

+2

您比较数值(这是什么日期,归类变量)为字符值。 – 2014-12-18 22:55:06

+0

我已经添加替换代码在我的问题的底部,以' '在ifelse声明中删除,代码运行,但没有找到匹配的日期 - 我还在比较苹果和橘子吗? – 2014-12-18 23:10:44

+0

在控制台输入'2015-12-19'没有引号,看看你得到了什么。 – 2014-12-18 23:12:11

回答

2

你没有解决的逻辑问题。你的第一次约会之前的日期怎么样?

> dt2009_10 <- scan(what="") 
1: '2009-08-24' 
2: '2009-09-07' 
3: '2009-09-08' 
4: '2009-11-21' 
5: '2009-11-30' 
6: '2009-12-11' 
7: '2009-12-19' 
8: '2010-01-19' 
9: '2010-03-20' 
10: '2010-03-29' 
11: '2010-05-07' 
12: '2010-05-15' 
13: '2010-05-17' 
14: '2010-06-13' 
15: '2010-06-14' 
16: '2010-08-08' 
17: 
Read 16 items 

> nam2009_10 <- c("Fall" , 
+ "Labor Day" , 
+ "Fall" , 
+ "Fall Break" , 
+ "Fall" , 
+ "Fall Finals" , 
+ "Winter Break" , 
+ "Spring" , 
+ "Spring Break" , 
+ "Spring" , 
+ "Spring Finals" , 
+ "Closed" , 
+ "Summer I" , 
+ "Closed" , 
+ "Summer II" , 
+ "Summer Break") 

我不会做所有的工作,建立了多年的一组值,而是将演示如何避免使用嵌套ifelse语句。 findInterval函数默认为左闭区间,所以我们可以使用我提取并放入dt2009_10的一组初始值。然后comapre您的日期,归类日期变量,使用的一个索引,我投入nam2009_10区间的名字:

nam2009_10[ findInterval(refstats$Date, as.Date(dt2009_10)) ] 
[1] "Fall"   "Fall"   "Summer Break" "Labor Day" "Fall"   
[6] "Fall Break" "Fall"   "Fall Finals" "Winter Break" "Winter Break" 
[11] "Spring"  "Spring Break" "Summer I"  "Closed"  "Summer II" 
[16] "Summer Break" "Summer Break" "Summer Break" "Summer Break" "Summer Break" 
[21] "Summer Break" "Summer Break" "Summer Break" "Summer Break" "Summer Break" 
[26] "Summer Break" "Summer Break" "Summer Break" "Summer Break" "Summer Break" 
[31] "Summer Break" "Summer Break" "Summer Break" "Summer Break" 

因为我没有做2010-11,或以后的岁月里,所有的较后日期出现了如暑假”。

然后

+2

在OP的前一个问题(在同一主题上),我指出他[我的答案](http://stackoverflow.com/questions/27045753/how-to-classify-a-given-date-time例如夏季秋季),我使用了'findInterval'。我仍然认为这是“解决问题的更好方法”。 – Henrik 2014-12-18 23:28:05

+0

“你没有解决的一个逻辑问题,在你的第一次约会之前的日期呢?”我认为这将最终成为NA值。我现在正试图理解'findInterval'方法,并且如果我能弄明白,就会用修改后的代码更新我的问题。我不知道“前一个OP的问题”是什么意思 - 也许这是指我以前的问题?什么是OP? – 2014-12-18 23:57:45

+0

OP ==“原创海报”。这是新闻组俚语。 – 2014-12-19 00:01:22