我有一个不完整的时间序列数据帧,我需要插入NA行以丢失时间戳。每天应该始终有6个时间戳,这在数据帧中由变量“信号”(1-6)表示。我正在尝试将不完整的数据帧$post = Post::query()->...->findOrFail($id)->???...
与包含所有信号的向量A
合并。下面是简化的示例数据:
B
请注意,B <- rep(1:6,2)
A <- data.frame(Signal = c(1,2,3,5,1,2,4,5,6), var1 = c(1,1,1,1,1,1,1,1,1))
Expected <- data.frame(Signal = c(1,2,3,NA, 5, NA, 1,2,NA,4,5,6), var1 = c(1,1,1,NA,1,NA,1,1,NA,1,1,1)
代表具有多个变量的数据帧,而B
中的NA是数据帧中NA的行。另外,实际的数据框具有更多的观测值(总共84个)。
如果你们能帮助我的话会很棒!
答案 0 :(得分:2)
如果您已经知道一天中有6个时间戳,则可以不用B
来完成。我们可以为每天创建分组,并使用complete
和NA
添加缺失的观测值。
library(dplyr)
library(tidyr)
A %>%
group_by(gr = cumsum(c(TRUE, diff(Signal) < 0))) %>%
complete(Signal = 1:6) %>%
ungroup() %>%
select(-gr)
# Signal var1
# <dbl> <dbl>
# 1 1 1
# 2 2 1
# 3 3 1
# 4 4 NA
# 5 5 1
# 6 6 NA
# 7 1 1
# 8 2 1
# 9 3 NA
#10 4 1
#11 5 1
#12 6 1
如果在输出中您需要Signal
作为NA
作为缺少组合,则可以使用
A %>%
group_by(gr = cumsum(c(TRUE, diff(Signal) < 0))) %>%
complete(Signal = 1:6) %>%
mutate(Signal = replace(Signal, is.na(var1), NA)) %>%
ungroup %>%
select(-gr)
# Signal var1
# <dbl> <dbl>
# 1 1 1
# 2 2 1
# 3 3 1
# 4 NA NA
# 5 5 1
# 6 NA NA
# 7 1 1
# 8 2 1
# 9 NA NA
#10 4 1
#11 5 1
#12 6 1