如何在R中使用向量作为foreach类型迭代器将函数应用于日期框架?

时间:2013-08-06 13:02:23

标签: r

我有一个日期矢量:

mydates <- seq(as.Date("2013-01-01"), length=6, by="1 month")

和包含更多数据的数据框,例如(但有更多条目):

startdate <- as.Date(c("2013-01-01", "2013-02-01", "2013-05-15", "2013-05-22"))
enddate <- as.Date(c("2013-02-21", "2013-03-15", "2013-06-15", "2013-07-22"))
state <- c("NY", "NY", "CA", "CA")
df <- data.frame(startdate=startdate, enddate=enddate, state=state)

现在我想使用mydates向量中的每个日期来检查每个状态中存在多少个条目。也就是说,我希望能够做这些陈述

result <- subset(df, startdate <= mydates[1] & enddate > mydates[1])
table(result$state)

对于mydates向量的每个元素。我尝试了各种应用函数和foreach包,但没有任何工作。感谢您的任何建议。

更新 根据下面的建议,我试过的许多东西中的一些不起作用:

 results <- for(i in 1:length(mydates)) {subset(df, startdate <= mydates[i] & enddate > mydates[i])} 

foreach(i=mydates) %do% { subset(df, startdate<= i & enddate > i) } 

并创建一个单独的函数

myf <- function (mydate,mydf=df) {
x <- subset(mydf, startdate <= mydate & enddate > mydate)

}

使用子集和尝试sapply(mydates,myf)

此     myresults&lt; - sapply(mydates,myf)

给我的结果与

相同
all_results <- sapply(1:length(mydates), function(x) subset(df, startdate <= mydates[x] & enddate > mydates[x]))

下面是

          [,1]     [,2]      [,3]     [,4]      [,5]      [,6]     
startdate 15706    Numeric,2 15737    Numeric,0 Numeric,0 Numeric,2
enddate   15757    Numeric,2 15779    Numeric,0 Numeric,0 Numeric,2
state     factor,1 factor,2  factor,1 factor,0  factor,0  factor,2

我可能会误解这些,但它似乎并没有向我显示各州的匹配结果数量。

2 个答案:

答案 0 :(得分:1)

......以及其他可能的解决方案

sapply(mydates, function(x, df){
        ind<-df[ ,"startdate"] <= x & df[,"enddate"] > x
        table(df[ind, "state"])}, df=df)

HTH

答案 1 :(得分:0)

我认为你正在寻找

all_results <- sapply(1:length(mydates), function(x) subset(df, startdate <= mydates[x] & enddate > mydates[x])

但是(根据标准的SO规则)发布您尝试过的代码会很有帮助,因此我们可以指出可能的错误。