gpt4 book ai didi

r - 如何从 R 中的开始日期和结束日期列表中计算一组中的当前人数

转载 作者:行者123 更新时间:2023-12-01 23:25:38 26 4
gpt4 key购买 nike

或者更确切地说,我怎样才能做得比我捏造的更好。

我有一个数据框,其中包含一组名称以及开始和结束日期。我想生成一个数据框,其中包含一段时间内组中的人数。注意,有些人还没有离开(结束日期是 NA)

这是一个示例数据集

foo<-data.frame(name=c("Bob","Sue", "Richard", "Jane"), 
Start=as.POSIXct(c("2006-03-23 GMT", "2007-01-20 GMT", "2007-01-20 GMT", "2006-03-23 GMT")),
End=as.POSIXct(c("2009-01-20 GMT", "NA", "2006-03-23 GMT", "NA")))

我在这里创建了一个数据框,其中的日期涵盖了我想要的范围。这感觉很脏。

daterange<-data.frame(date=as.POSIXct(
paste(
rep(2006:2009, each=12),
"-",
rep(01:12, times=4),
"-",
1,
" GMT",
sep="")
)
)

#cheat by setting NAs to soemthing far away
foo$End[is.na(foo$End)]<-as.POSIXct(Sys.time())+(365*24*60*60)

现在我使用 ddply 来生成结果。

ddply(.data=daterange, .variable="date", function(df) {
result=nrow(subset(foo, Start<df$date & End>df$date))
return(result)
})

一定有更简单的方法吗?

最佳答案

这是使用 plyr 的替代方法。它直接与原始数据框 foo 一起使用,不需要将 NA 转换为日期。该代码不言自明且可读性强。欢迎任何评论。

dates = seq(as.POSIXct('2006-01-01'), as.POSIXct('2009-12-01'), by = "month")
count = ldply(dates, function(d)
with(foo, sum((Start < d) + (d < End | is.na(End)) == 2)))
data.frame(dates, count)

关于r - 如何从 R 中的开始日期和结束日期列表中计算一组中的当前人数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6549957/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com