как заменить значение для одной временной метки на среднее значение всех наблюдений для этой временной метки - PullRequest
0 голосов
/ 12 октября 2019

При работе с проблемами временных рядов в R у меня есть несколько наблюдений для одной временной отметки, как заменить значение для одной временной отметки на среднее значение всех наблюдений для этой временной отметки и удалить все перекрывающиеся строки временной отметки.

Например, у меня есть временной ряд, подобный этому:

Date={2016-3-1, 2016-4-1, 2016-4-1, 2016-4-1,2016-5-1,2015-5-1, 2016-6-1).
Price={111,122,124,155,142,177,134}

Мои ожидаемые результаты такие:

Date={2016-3-1,2016-4-1,2016-5-1,2017-6-1}, 
Price={111,133.67,159.5,134 }
(133.67=mean(122,124,155), 159.5=mean(142,177))

1 Ответ

0 голосов
/ 12 октября 2019

Это то, что вы ищете?

Date=c("2016-3-1", "2016-4-1", "2016-4-1", "2016-4-1","2016-5-1","2015-5-1", "2017-6-1")
Price=c(111,122,124,155,142,177,134)

library(dplyr)
library(lubridate)
df <- data.frame(Date = ymd(Date), Price = Price)
df %>% 
  group_by(ymd(Date)) %>%
  summarise(mean = sprintf("%0.2f",mean(Price, na.rm = TRUE)))

# # A tibble: 5 x 2
#     `ymd(Date)` mean  
#     <date>      <chr> 
# 1 2015-05-01  177.00
# 2 2016-03-01  111.00
# 3 2016-04-01  133.67
# 4 2016-05-01  142.00
# 5 2017-06-01  134.00

Если вы хотите baseR, это тоже работает:

print(aggregate(list(Mean=df$Price), list(Date = df$Date), mean), digits = 5)

#       Date   Mean
# 1 2015-05-01 177.00
# 2 2016-03-01 111.00
# 3 2016-04-01 133.67
# 4 2016-05-01 142.00
# 5 2017-06-01 134.00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...