1

我的数据结构如下:

        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')

有没有办法让第一个“错误”版本工作?

4

2 回答 2

1

我在这里只有很长的路要走!检查条件应包含 3 个部分:

  1. 间隔内所有月份的所有年份:例如。在我们的案例中,从 2010 年到 2015 年,所有月份都被考虑在内。

  2. 去年:可能只涉及几个月。例如,从 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)
    
于 2017-08-31T11:30:41.137 回答
0

您的所有日期和截止日期似乎都是字符格式。最好的方法是使用日期格式(例如非常有用的函数系列ymd, ymd_hms, year,monthlubridate)但是如果它们是英语顺序(首先是年,然后是月,然后是日,前导零),您实际上不需要将它们转换为子集的日期,您可以将所有内容保留为文本格式,剪切最后 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
于 2017-08-31T12:01:39.680 回答