用R圈出日期

时间:2015-09-16 13:39:15

标签: r

我需要在R中编写一些代码,通过循环日期来构建字符串,我似乎无法在我的书中或通过Google搜索找到这样的示例。基本上是:

for theDate = 1Jan14 to 31Dec14{
 "http://website.com/api/" + theDate
} 

我考虑创建一个包含日期的输入文件,但这似乎不太优雅。有人知道更好的解决方案吗?

4 个答案:

答案 0 :(得分:6)

您可以使用

> dates <- seq(as.Date("2014-01-01"), as.Date("2014-12-31"), by=1)

生成连续几天的向量。你想用这个做什么并不完全清楚你的伪代码,但你可以直接迭代向量(通常不是你想要的R)

> for (d in dates) {
    # Code goes here.
}

@Roland的评论解决方案将为您提供以下形式的矢量:

> paste0("http://website.com/api/", dates)
[1] "http://website.com/api/2014-01-01" "http://website.com/api/2014-01-02"
[3] "http://website.com/api/2014-01-03" "http://website.com/api/2014-01-04"
[5] "http://website.com/api/2014-01-05" "http://website.com/api/2014-01-06"
...

答案 1 :(得分:4)

这不消耗那么多内存,也不需要julian函数:

start <- as.Date("01-08-14",format="%d-%m-%y")
end   <- as.Date("08-09-14",format="%d-%m-%y")

theDate <- start

while (theDate <= end)
{
  print(paste0("http://website.com/api/",format(theDate,"%d%b%y")))
  theDate <- theDate + 1                    
}

[1] "http://website.com/api/01Aug14"
[1] "http://website.com/api/02Aug14"
[1] "http://website.com/api/03Aug14"
[1] "http://website.com/api/04Aug14"
[1] "http://website.com/api/05Aug14"
[1] "http://website.com/api/06Aug14"
[1] "http://website.com/api/07Aug14"
[1] "http://website.com/api/08Aug14"
[1] "http://website.com/api/09Aug14"
[1] "http://website.com/api/10Aug14"
[1] "http://website.com/api/11Aug14"
[1] "http://website.com/api/12Aug14"
[1] "http://website.com/api/13Aug14"
[1] "http://website.com/api/14Aug14"
[1] "http://website.com/api/15Aug14"
[1] "http://website.com/api/16Aug14"
[1] "http://website.com/api/17Aug14"
[1] "http://website.com/api/18Aug14"
[1] "http://website.com/api/19Aug14"
[1] "http://website.com/api/20Aug14"
[1] "http://website.com/api/21Aug14"
[1] "http://website.com/api/22Aug14"
[1] "http://website.com/api/23Aug14"
[1] "http://website.com/api/24Aug14"
[1] "http://website.com/api/25Aug14"
[1] "http://website.com/api/26Aug14"
[1] "http://website.com/api/27Aug14"
[1] "http://website.com/api/28Aug14"
[1] "http://website.com/api/29Aug14"
[1] "http://website.com/api/30Aug14"
[1] "http://website.com/api/31Aug14"
[1] "http://website.com/api/01Sep14"
[1] "http://website.com/api/02Sep14"
[1] "http://website.com/api/03Sep14"
[1] "http://website.com/api/04Sep14"
[1] "http://website.com/api/05Sep14"
[1] "http://website.com/api/06Sep14"
[1] "http://website.com/api/07Sep14"
[1] "http://website.com/api/08Sep14"
> 

答案 2 :(得分:0)

你可以将你的日期翻译成朱利安日,然后根据朱利安日写一个循环。

要转换为朱利安日,您可以使用描述为here

的代码

然后你可以使用julian日编写代码,如:

tmp <- as.POSIXlt("1Jan14", format = "%d%b%y")
strdate <- julian(tmp)
tmp <- as.POSIXlt("31Dec14", format = "%d%b%y")
enddate <- julian(tmp)

for (theDate in strdate:enddate){
    paste ("http://website.com/api/", toString(theDate), sep = "")
}

你必须弄清楚如何转换回来。我不确定朱利安的功能。也许你也应该看一下“yday”的润滑剂包。

答案 3 :(得分:0)

当然,在我提出问题后,我碰巧发现了这一点。

days <- seq(from=as.Date('2011-02-01'), to=as.Date("2011-03-02"),by='days' )
for ( i in seq_along(days) )
{
  print(paste(days[i],"T12:00:00", sep=""))
}