【问题标题】:summing within a day via an interval R通过间隔 R 在一天内求和
【发布时间】:2016-04-06 19:50:56
【问题描述】:

我想计算某一天在场的总人数。它们有一个间隔 (start.date) 和 (end.date)。我如何计算所有间隔在给定日期内的人?我考虑过使用 lubridate 和 interval(),但我仍然被困在如何每天迭代这个?请帮忙。

first_date = as.Date(min("2011-01-01"))
last_date  = as.Date(max("2011-12-31"))
all_dates = seq(first_date, by=1, to=last_date)

CY_2015 <- data.frame(DATE = all_dates)

df <- data.frame(ID = c(1,2,3,4),
                 START.DATE = as.Date(c("2011-07-24", "2011-07-19", "2011-07-08", "2011-07-23")),
                 END.DATE = as.Date(c("2011-07-26", "2011-07-21", "2011-07-10", "2011-07-25")))

# I tried something like this to no avail:

for (i in 1:365) {
  DATE <- CY_2015$DATE[i]
  df <- df %>% mutate(new_var = in.interval.lo(DATE, START.DATE, END.DATE))
  names(df)[length(df)] <- paste0(DATE)
  }

【问题讨论】:

标签: r


【解决方案1】:

应该这样做。我曾经申请迭代所有的日子和数据框上的“which”命令来确定每天的计数。

 #number of people present per day
countperday<-sapply(all_dates, function(x) {length(which(df$START.DATE<=x &df$END.DATE>=x))})
#results<-data.frame(counts=countperday, date=all_dates) 
  #only the days where someone was present
days<-all_dates[countperday>0]   
  #reduced results
results<-data.frame(counts=countperday[countperday>0], date=days)

可能不是最佳方法,但应该回答您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    相关资源
    最近更新 更多