R 考虑时间序列数据中的零

R 考虑时间序列数据中的零,r,dplyr,time-series,R,Dplyr,Time Series,您好,我正在将当前数据集转换为时间序列,方法是将其划分为周,并每周计数。例如,当前计数为零的周数在数据集中被忽略。下面是示例数据集。我想包括计数为零的所有周。如何使用dplyr对其进行转换 2013-10-6 1 2014-08-03 1 2014年10月12日11)dplyr假设输入是右端注释中重复显示的DF,将DF连接到数周的数据框中,然后将NA值替换为零。在注释末尾的数据框中,值为整数,但如果在应用程序中为双精度,则使用0代替0L library(dplyr) DF %>%

您好,我正在将当前数据集转换为时间序列,方法是将其划分为周,并每周计数。例如,当前计数为零的周数在数据集中被忽略。下面是示例数据集。我想包括计数为零的所有周。如何使用dplyr对其进行转换

2013-10-6 1
2014-08-03 1
2014年10月12日1

1)dplyr假设输入是右端注释中重复显示的DF,将DF连接到数周的数据框中,然后将NA值替换为零。在注释末尾的数据框中,
为整数,但如果在应用程序中为双精度,则使用0代替0L

library(dplyr)

DF %>%
   right_join(data.frame(date = seq(first(.$date), last(.$date), 7))) %>%
   mutate(value = coalesce(value, 0L))
2)zoo由于这是一个时间序列,许多计算可以通过使用时间序列表示法来简化。转换为zoo对象
z
我们可以使用这个从zoo到ts再到ts的线性转换,它具有插入NA值的效果。由于ts类不能直接表示日期,我们使用聚合将其转换回日期,然后使用na.fill将NAs替换为0

library(zoo)
z <- read.zoo(DF, frequency = 7)

na.fill(aggregate(as.zoo(as.ts(z)), as.Date, c), 0)

行我们可以使用
tidyr
包中的
complete
full\ seq

library(dplyr)
library(tidyr)

dat2 <- dat %>%
  mutate(V1 = as.Date(V1)) %>%
  complete(V1 = full_seq(V1, period = 7), fill = list(V2 = 0))
dat2
# # A tibble: 54 x 2
#    V1            V2
#    <date>     <dbl>
#  1 2013-10-06     1
#  2 2013-10-13     0
#  3 2013-10-20     0
#  4 2013-10-27     0
#  5 2013-11-03     0
#  6 2013-11-10     0
#  7 2013-11-17     0
#  8 2013-11-24     0
#  9 2013-12-01     0
# 10 2013-12-08     0
# # ... with 44 more rows
库(dplyr)
图书馆(tidyr)
dat2%
变异(V1=截止日期(V1))%>%
完成(V1=完整顺序(V1,周期=7),填充=列表(V2=0))
dat2
##A tibble:54 x 2
#V1 V2
#         
#  1 2013-10-06     1
#  2 2013-10-13     0
#  3 2013-10-20     0
#  4 2013-10-27     0
#  5 2013-11-03     0
#  6 2013-11-10     0
#  7 2013-11-17     0
#  8 2013-11-24     0
#  9 2013-12-01     0
# 10 2013-12-08     0
# # ... 还有44行
数据

dat <- read.table(text = "'2013-10-6' 1
'2014-08-03' 1
                  '2014-10-12' 1",
                  header = FALSE, stringsAsFactors = FALSE)

dat一个选项是创建一个您希望包含的日期列表,并将其连接回摘要数据框。在@cardinal40 comment之后,您可以生成一个最小日期和最大日期之间的所有日期序列,并对其进行外部连接。如果您想要更具体的答案,您需要提供示例数据和所需输出。感谢您的解释:)
library(dplyr)
library(tidyr)

dat2 <- dat %>%
  mutate(V1 = as.Date(V1)) %>%
  complete(V1 = full_seq(V1, period = 7), fill = list(V2 = 0))
dat2
# # A tibble: 54 x 2
#    V1            V2
#    <date>     <dbl>
#  1 2013-10-06     1
#  2 2013-10-13     0
#  3 2013-10-20     0
#  4 2013-10-27     0
#  5 2013-11-03     0
#  6 2013-11-10     0
#  7 2013-11-17     0
#  8 2013-11-24     0
#  9 2013-12-01     0
# 10 2013-12-08     0
# # ... with 44 more rows
dat <- read.table(text = "'2013-10-6' 1
'2014-08-03' 1
                  '2014-10-12' 1",
                  header = FALSE, stringsAsFactors = FALSE)