Частичное суммирование и расчет с данными из другой таблицы - PullRequest
0 голосов
/ 17 декабря 2018

Моя цель состоит в том, чтобы выполнить временную дезагрегацию осадков с использованием двух разных наборов данных:

1), содержащих данные о дне и часе наблюдения и столбец со значениями наблюдения за осадками, 2) другой набор данных, содержащий информацию о суточной сумме осадков.

Сначала я хотел бы создать новый столбец Процент для первого набора данных, который будет содержать пропорциональное распределение в течение дня осадков из столбца Значение .После этого я хочу взять соответствующую (в соответствии с датой) сумму осадков из другого набора данных и временно дезагрегировать ее, используя недавно созданный столбец Percent , и создать столбец, подобный NewValue .

Я хочу сделать это автоматически, поскольку у меня есть 3 года наблюдений.

Ниже приведен воспроизводимый пример результатов, которых я хотел бы достичь:

dates = seq(as.POSIXct("2015-1-1 23:00"), as.POSIXct("2015-1-2 23:00"), by = "hour")
Value = c(0,0.15,0.1,0,0,0.3,0.4,0.5,0,0,0,0,0,0,0.6,0.1,0,0,0,0,0,0.3,0.5,0,0)
Percent = c(0,0.05,0.03,0,0,0.1,0.14,0.17,0,0,0,0,0,0,0.2,0.03,0,0,0,0,0,0.1,0.17,0,0)
NewValue = c(0,0.1,0.07,0,0,0.2,0.27,0.34,0,0,0,0,0,0,0.41,0.07,0,0,0,0,0,0.2,0.34,0,0)

DATA = data.frame(dates, Value, Percent, NewValue)

В приведенном выше примере для 2015-1-1 я принял суточные осадки равными 0, а для другого дня - 2 мм.

1 Ответ

0 голосов
/ 17 декабря 2018

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

# hourly precip
d1 <- data.frame(dates=seq(as.POSIXct("2015-1-1 01:00"), 
                 as.POSIXct("2015-1-3 23:00"), by = "hour"), precip=runif(71))
# calc d2 : not needed in your case
d2 <- ddply(d1, .(day=as.Date(dates)), summarize, precipsum=sum(precip))

# calc relative precip
d1$day <- as.Date(d1$dates)
out <- merge(d1, d2, by='day')
out$Percent <- out$precip / out$precipsum
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...