gpt4 book ai didi

r - 计算不存在的日期

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

我正在处理一个包含 2 列的数据框,如下所示:

    time        frequency
2014-01-06 13
2014-01-07 30
2014-01-09 56

我的问题是我有兴趣计算频率为 0 的天数。数据是使用 RPostgreSQL/RSQLite 提取的,因此除非有值(即频率至少为 1),否则没有给出日期时间。如果我有兴趣计算数据框中实际不存在的这些日期,是否有一种简单的方法可以做到这一点? IE。如果我们考虑日期范围 2014-01-01 到 20-14-01-10,我希望它算 7

我唯一的想法是蛮力为每个日期创建一个单独的数据框(请注意,这是 4 年以上的日期,这将是一项艰巨的任务),然后合并两个数据框并计算 NA 值的数量。我确信有一个比我想象的更优雅的解决方案。

谢谢!

最佳答案

按日期排序,然后查找差距。

start <- as.Date("2014-01-01")
time <- as.Date(c("2014-01-06", "2014-01-07","2014-01-09"))
end <- as.Date("2014-01-10")

time <- sort(unique(time))

# Include start and end dates, so the missing dates are 1/1-1/5, 1/8, 1/10
d <- c(time[1]- start,
diff(time) - 1,
end - time[length(time)] )

d # [1] 5 0 1 1
sum(d) # 7 missing days

现在错过了哪些日子......

(gaps <- data.frame(gap_starts = c(start,time+1)[d>0],
gap_length = d[d>0]))
# gap_starts gap_length
# 1 2014-01-01 5
# 2 2014-01-08 1
# 3 2014-01-10 1

for (g in 1:nrow(gaps)){
start=gaps$gap_starts[g]
length=gaps$gap_length[g]
for(i in start:(start+length-1)){
print(as.Date(i, origin="1970-01-01"))
}
}
# [1] "2014-01-01"
# [1] "2014-01-02"
# [1] "2014-01-03"
# [1] "2014-01-04"
# [1] "2014-01-05"
# [1] "2014-01-08"
# [1] "2014-01-10"

关于r - 计算不存在的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31170522/

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