我的数据结构如下:
curr time
<chr> <date>
1 USD 2015-07-18
2 USD 2014-10-16
3 USD 2016-03-26
问题:
我喜欢选择整月
subset(ks, deadline >= '2010-01' & deadline <= '2016-03')
返回
Error in charToDate(x) :
character string is not in a standard unambiguous format.
这有效,但总是需要手动检查一个月的日子。
subset(ks, deadline >= '2010-01-01' & deadline <= '2016-03-31')
有没有办法获得第一个&#34;错误&#34;版本工作?
答案 0 :(得分:1)
我这里只有很长的路要走!检查条件应分为3部分:
区间内所有月份的所有年份:例如。在我们的案例中,2010年至2015年将考虑所有月份。
去年:这里可能只有几个月。例如,从2016年开始,只考虑前3个月。同一个起始年份
library(lubridate)
log.cond <- (year(dt$time) %in% 2010:2015) | (year(dt$time) == 2016 & month(dt$time) %in% 1:3)
subset(dt, log.cond)
答案 1 :(得分:0)
您的所有日期和截止日期似乎都是字符格式。最好的方法是使用日期格式(例如ymd
包中非常有用的函数系列ymd_hms
,year
,month
,lubridate
等但是如果他们是英语口语(第一年,然后是月,然后是一天,带有前导零),你实际上并不需要将它们变成日期到子集,你可以把所有内容保留为文本格式,切断最后一个3个字符(天)和R将进行数字比较:
ks = data.frame(curr="USD", "time"=c("2015-07-18", "2014-10-16", "2016-03-26"), stringsAsFactors = F)
ks$time2 <- substr(ks$time, 1, nchar(ks$time)-3)
然后您可以使用您的第一个语法而不做任何更改:
subset(ks, time2 >= '2015-01' & time2 <= '2016-03')
#### curr time time2
#### 1 USD 2015-07-18 2015-07
#### 3 USD 2016-03-26 2016-03