我正在处理时间序列数据,我需要有连续的时间戳,但是在捕获数据时几乎没有丢失数据时间戳记点,如下所示,
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
请帮助!
答案 0 :(得分:2)
最好有一个特定的示例来显示特定的预期输出,以便几乎没有歧义和假设的空间。但是,我根据自己的理解创建了一个虚拟数据,并尝试相应地解决它。
如果我对您的理解正确,那么您就有时间序列数据,每秒都有数据点,但是有时会缺少几秒钟,您想用该列的mean
来填充它。
我们可以使用complete
通过在min
和max
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)