我有一个日期矢量:
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
我可能会误解这些,但它似乎并没有向我显示各州的匹配结果数量。
答案 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规则)发布您尝试过的代码会很有帮助,因此我们可以指出可能的错误。