例如,
dates <- c("25–27 Oct", "25 Oct", "24–25 Oct", "23–24 Oct", "23–24 Oct",
"22–23 Oct")
将它们转换为日期向量的最佳方法是什么?一个理想的结果是我们可以在数据框中使用它们来绘制时间序列等。
解决方案将要么
- 务实并产生一个带有结束日期的向量或
- 列出两个向量中的开始和结束日期。
这个怎么样?如果日期不是间隔,例如"25 Oct"
您也可以设置from
为to
相同的值,但这取决于您将如何处理输出。
do.call(rbind, lapply(dates, function(str){
if(grepl("–", str)){
data.frame(from=as.Date(sub("–\\d+", "", str), "%d %b"),
to=as.Date(sub("\\d+–", "", str), "%d %b"))
} else {
data.frame(from = as.Date(str, "%d %b"), to=NA)
}
}))
输出
from to
1 2013-10-25 2013-10-27
2 2013-10-25 <NA>
3 2013-10-24 2013-10-25
4 2013-10-23 2013-10-24
5 2013-10-23 2013-10-24
6 2013-10-22 2013-10-23
你到底想存储什么?间隔或特定日期,例如间隔的中间?
如果您不需要间隔,那么您可以尝试使用 gsub 或/和 strptime() 获取日期
http://stat.ethz.ch/R-manual/R-devel/library/base/html/strptime.html
例子:
> s="29 Mai"
> strptime(s,format="%d %b")
[1] "2013-05-29"
记得设置适当的语言环境时间/日期来处理 %b