gpt4 book ai didi

r - 处理时间序列中的缺失值

转载 作者:行者123 更新时间:2023-12-04 09:12:23 24 4
gpt4 key购买 nike

我正在处理时间序列数据,我需要有连续的时间戳,但在捕获时很少有数据时间戳点被遗漏,如下所示,

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 所示,时间戳一直持续到 第 5 行 但错过了 之间 10 秒 的数据捕获第 5 和第 6 行。我的数据框大约有 60000 行,手动识别缺失值非常繁琐。因此,我一直在寻找使用 R 自动化处理缺失值的过程

我的结果数据框如下,

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 mean(A)
5.1 02/02/2018 07:46:01 mean(A) mean(b) mean(c)
5.2 02/02/2018 07:46:02 mean(A) mean(b) mean(c)
5.3 02/02/2018 07:46:03 mean(A) mean(b) mean(c)
5.4 02/02/2018 07:46:04 mean(A) mean(b) mean(c)
5.5 02/02/2018 07:46:05 mean(A) mean(b) mean(c)
5.6 02/02/2018 07:46:06 mean(A) mean(b) mean(c)
5.7 02/02/2018 07:46:07 mean(A) mean(b) mean(c)
5.8 02/02/2018 07:46:08 mean(A) mean(b) mean(c)
5.9 02/02/2018 07:46:09 mean(A) mean(b) mean(c)
6 02/02/2018 07:46:10 112 2323 2323

请帮忙!

最佳答案

最好有一个具体的例子来显示具体的预期输出,这样就没有歧义和假设的空间了。但是,我根据自己的理解创建了一个虚拟数据,并尝试相应地解决它。

如果我没理解错的话,你有时间序列数据,每秒都有数据点,但有时会丢失一些秒数,你想用该列的 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

如果您检查最后 3 列的列均值,您可以看到这些值已被准确替换。

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

关于r - 处理时间序列中的缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56125885/

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