处理时间序列中的缺失值

时间:2019-05-14 08:16:43

标签: r time-series

我正在处理时间序列数据,我需要有连续的时间戳,但是在捕获数据时几乎没有丢失数据时间戳记点,如下所示,

chmod 0600 ~/.ssh/id_rsa

DF

如上面的示例ID Time_Stamp A B C 1 02/02/2018 07:45:00 123 567 434 2 02/02/2018 07:45:01 ..... ... 5 02/02/2018 07:46:00 6 02/02/2018 07:46:10 112 2323 2323 所示,时间戳一直持续到df,但是在row 5之间错过了10 seconds的捕获数据。我的数据框是关于5th and 6th row的信息,因此手动识别丢失的值很乏味。 因此,我一直在寻找使用R

处理缺失值的自动化程序。

我的结果数据框如下,

60000 rows

请帮助!

2 个答案:

答案 0 :(得分:2)

最好有一个特定的示例来显示特定的预期输出,以便几乎没有歧义和假设的空间。但是,我根据自己的理解创建了一个虚拟数据,并尝试相应地解决它。

如果我对您的理解正确,那么您就有时间序列数据,每秒都有数据点,但是有时会缺少几秒钟,您想用该列的mean来填充它。

我们可以使用complete通过在minmax Time_Stamp之间每秒生成一个序列并用mean填充缺失值来实现在相应的列中。 ID看起来像是每一行的唯一标识符,因此用row_number()填充了它。

library(dplyr)
library(tidyr)

df %>%
  complete(Time_Stamp = seq(min(Time_Stamp), max(Time_Stamp), by = "sec")) %>%
  mutate_at(vars(A:C), ~replace(., is.na(.), mean(., na.rm = TRUE))) %>%
  mutate(ID = row_number()) 


# A tibble: 11 x 5
#   Time_Stamp             ID     A     B     C
#   <dttm>              <int> <dbl> <dbl> <dbl>
# 1 2018-02-02 07:45:00     1  123   567   434 
# 2 2018-02-02 07:45:01     2  234   100   110 
# 3 2018-02-02 07:45:02     3  234   100   110 
# 4 2018-02-02 07:45:03     4  176.  772.  744.
# 5 2018-02-02 07:45:04     5  176.  772.  744.
# 6 2018-02-02 07:45:05     6  176.  772.  744.
# 7 2018-02-02 07:45:06     7  176.  772.  744.
# 8 2018-02-02 07:45:07     8  176.  772.  744.
# 9 2018-02-02 07:45:08     9  176.  772.  744.
#10 2018-02-02 07:45:09    10  176.  772.  744.
#11 2018-02-02 07:45:10    11  112  2323  2323 

如果检查最后三列的列均值,则可以看到这些值已被正确替换。

colMeans(df[3:5])
#     A      B      C 
#175.75 772.50 744.25 

数据

df <- structure(list(ID = 1:4, Time_Stamp = structure(c(1517557500, 
1517557501, 1517557502, 1517557510), class = c("POSIXct", "POSIXt"
), tzone = "UTC"), A = c(123L, 234L, 234L, 112L), B = c(567L, 
100L, 100L, 2323L), C = c(434L, 110L, 110L, 2323L)), class = "data.frame", 
row.names = c(NA, -4L))

看起来像

df

#  ID          Time_Stamp   A    B    C
#1  1 2018-02-02 07:45:00 123  567  434
#2  2 2018-02-02 07:45:01 234  100  110
#3  3 2018-02-02 07:45:02 234  100  110
#4  4 2018-02-02 07:45:10 112 2323 2323

答案 1 :(得分:0)

关于您的问题,有几件事要说:

  • 从科学上讲,是否有动机将平均值替换为有意义的缺失值?
  • 技术上,这可以通过*apply()函数来完成(例如lapply可以很好地适应数据帧)
  • 关于R社区,这可能是一个偶然的问题。您是否在其他地方查看过其他帖子?像thisthat一样可以提供帮助或提供线索。 希望我的回答对您有所帮助。