Mit df
data.framedplyr: Summe der Tageswerte für ganzes Jahr und die Summe der spezifischen Tageswerte in der gleichen Formel
date <- rep(as.Date(seq(as.Date("2003-01-01"),
as.Date("2005-12-31"), by = 1),
format="%Y-%m-%d"), 9)
site <- c(rep("Site_1", 3*1096), rep("Site_2", 3*1096), rep("Site_3", 3*1096))
rain <- c(rep(as.numeric(sample(1.1e6:87e6, 1096, replace=T)),3),
rep(as.numeric(sample(1.3e5:56e6, 1096, replace=T)),3),
rep(as.numeric(sample(5e5:77e6, 1096, replace=T)),3))
parameter <- rep(c(rep("param_A", 1096), rep("param_B", 1096), rep("param_c", 1096)), 3)
value <- c(runif(1096, 0.005, 2.3)/1e6,
runif(1096, 0.5, 3.1)/1e6,
runif(1096, 0.003, 0.04)/1e6,
runif(1096, 0.002, 1.7)/1e6,
runif(1096, 0.3, 4.5)/1e6,
runif(1096, 0.001, 0.07)/1e6,
runif(1096, 0.007, 2.7)/1e6,
runif(1096, 0.4, 2.8)/1e6,
runif(1096, 0.004, 0.09)/1e6)
df <- data.frame(date, site, rain, parameter, value)
df[c(1:4, 8:10, 30:35, 60:65, 90:97, 100:125, 524:645,
1000:1100, 1400:1540, 1789:1890, 2100:2250,
2459:2765, 3942:3987, 4600:4698, 5210:5310, 6081:6154, 7613:7689,
8809:8888, 9120:9190, 9600:9650), 5] <- NA
Für jeden Standort ich für jedes Jahr berechnet werden soll, für jeden Parameter, es den Namen einer Variable let saturation
wo es gleich
(sum(rain*value)/sum(rain)) for days where value is not NA * sum(rain per year)
ich dies mit dplyr
tun wollte. Ich habe den folgenden Code versucht
library(dplyr)
df1 <- df %>%
dplyr::mutate(year = factor(format(date, "%Y"))) %>%
dplyr::arrange(site, year, parameter) %>%
dplyr::group_by(site, year, parameter) %>%
dplyr::summarise(sum_rain = sum(rain))
df2 <- df %>%
dplyr::mutate(year = factor(format(date, "%Y"))) %>%
dplyr::arrange(site, year, parameter) %>%
dplyr::group_by(site, year, parameter) %>%
dplyr::filter (!is.na(value)) %>%
dplyr::summarise(specific_days = sum(rain*value)/sum(rain))
saturation <- df1$sum_rain * df2$specific_days
Es hat gut funktioniert und gab mir, was ich wollte. Allerdings musste ich zwei data.frames
df1
und df2
erstellen und df1$sum_rain
durch df2$specific_days
multiplizieren, um die saturation
zu erhalten. Müssen Sie das trotzdem tun, ohne zwei data.frames mit dplyr zu erstellen?
Vielen Dank für Ihre Zeit und Hilfe – aelwan