Я работаю с временными рядами данных о осадках и пытаюсь использовать метод медианного вменения для замены всех точек данных значения с медианой из всех точек данных за соответствующий месяц было записано значение 0
.Заменить значения в соответствии с месяцами в кадре данных со значениями в другом столбце в r, используя функции приложения
У меня есть два кадра данных, один с исходными данными осадков:
> head(df.m)
prcp date
1 121.00485 1975-01-31
2 122.41667 1975-02-28
3 82.74026 1975-03-31
4 104.63514 1975-04-30
5 57.46667 1975-05-31
6 38.97297 1975-06-30
И один с среднемесячными значениями:
> medians
Group.1 x
1 01 135.90680
2 02 123.52613
3 03 113.09841
4 04 98.10044
5 05 75.21976
6 06 57.47287
7 07 54.16667
8 08 45.57653
9 09 77.87740
10 10 103.25179
11 11 124.36795
12 12 131.30695
Ниже текущим решение, которое я придумал с использованием 1-го ответа here:
df.m[,"prcp"] <- sapply(df.m[,"prcp"], function(y) ifelse(y==0, medians$x,y))
Это имеет не работает, поскольку применяется только первое значение df medians$Group.1
, которое является январем (01
). Как я могу получить значения, чтобы правильная медиана применялась с соответствующего месяца?
Другой способ, который я попытался решение это через ниже:
df.m[,"prcp"] <- sapply(medians$Group.1, function(y)
ifelse(df.m[format.Date(df.m$date, "%m") == y &
df.m$prcp == 0, "prcp"], medians[medians$Group.1 == y,"x"],
df.m[,"prcp"]))
Описание выше функции - функция тестов и возвращает количество нулей за каждый месяц, что есть нулевое значение в df.m[,"prcp"]
Такая же проблема здесь как 1-е решение, но она возвращает все значения 0 по месяцам (если просто выполняется часть sapply()
).
Как я могу заменить все 0
на df.m$prcp
с их соответствующими медианами от medians
df в зависимости от месяца данных?
Извините, если это основной вопрос, я немного новичок здесь. Любая помощь будет очень признательна.
Являются ли dataframes одинаковой длины? Какие годы соответствует среднему месячному значению? – Parfait
Данные не одинаковой длины. 'df.m' - 504 строки, а' medians' - 12 строк (показано выше). Медианные месяцы не имеют лет, они являются медианами этого конкретного месяца для всего набора данных. Эти значения я хотел бы добавить в свой 'df.m', где' df.m $ prcp' == 0, в зависимости от месяца. – steich