一. 问题引入
下面是一个房地产价格数据,现在想要提取2008年6月份的数据进行分析,在R中该如何操作呢?
city price bedrooms squarefeet lotsize latitude longitude month 1 San Francisco 1470000 3 2424 NA 37.75651 -122.4469 2008-06-01 2 San Francisco 385000 0 1304 2143 37.71010 -122.4216 2009-06-01 3 San Francisco 1043000 2 1400 NA 37.77984 -122.3928 2009-06-01 4 San Francisco 560000 2 1149 NA 37.78696 -122.4225 2009-01-01 5 San Francisco 419000 NA NA NA 37.78696 -122.4225 2008-03-01 6 San Francisco 552000 NA NA NA 37.78430 -122.3909 2009-03-01
# 这里就涉及到R的日期处理方法!
二. R日期处理方法简介
# 1)取出当前日期
> Sys.Date() [1] "2015-04-20"
> date() [1] "Mon Apr 20 15:46:32 2015"
#2)字符串转化为日期
as.Date()可以将一个字符串转换为日期值,默认格式是yyyy-mm-dd。
##在R中,日期类型其实是double类型,实际存储的是从1970年1月1日以来的天数!
> as.Date('2015-4-20') ##得到"2007-02-01",显示为字符串,但实际是用double存储的!
>as.double(as.Date("1970-01-01")) #结果为0,是从1970年1月1日以来的天数。## 可以把定制的日期字符串转换为日期型
> as.Date("2015年4月20日", "%Y年%m月%d日") [1] "2015-04-20"
#3)日期转化为字符串
> today <- Sys.Date() > format(today, "%Y年%m月%d日") [1] "2015年04月20日"
$4)计算日期差
由于日期内部是用double存储的天数,所以是可以相减的。
> today<-Sys.Date() > age30<- as.Date("2020-01-01") > age30-today Time difference of 1717 days
@@@离我30岁只有1717天了啊!
##用difftime()函数可以计算相关的秒数、分钟数、小时数、天数、周数
difftime(today, age30, units="weeks") #还可以是“secs”, “mins”, “hours”, “days”
> difftime(today, age30, units="weeks") Time difference of -245.2857 weeks
三. 需求解答
> dat<-subset(x = dat,subset =(as.double(as.Date(dat$month))>=14031 & as.double(as.Date(dat$month))<=14060)) #as.Date将字符型month转化成日期型,as.double转化成double型! > head(dat) city price bedrooms squarefeet lotsize latitude longitude month 1 San Francisco 1470000 3 2424 NA 37.75651 -122.4469 2008-06-01 24 San Francisco 815000 NA NA NA 37.74917 -122.4500 2008-06-01 29 San Francisco 548000 2 1100 1792 37.71153 -122.4623 2008-06-01 33 San Francisco 400000 NA NA NA 37.79035 -122.4126 2008-06-01 59 San Francisco 1795000 3 1028 NA 37.80241 -122.4186 2008-06-01 88 San Francisco 2300000 10 6600 2738 37.77007 -122.4320 2008-06-01