Всегда лучше иметь конкретный пример, показывающий конкретный ожидаемый результат, чтобы было мало места для двусмысленности и предположения. Тем не менее, я создал фиктивные данные на основе своего понимания и попытался решить их соответствующим образом.
Если я вас правильно понял, у вас есть данные временного ряда с точкой данных каждую секунду, но иногда не хватает нескольких секунд, которые вы хотите заполнить 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
Если вы проверите значение столбца для последних 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