У меня есть:
- Линейно интерполировал данные dFe_env через каждые 1 м и создавал кадр данных (это работает)
- Извлечена «Глубина» (на основе скорости погружения) с 30-минутными интервалами (это работает)
- Создан столбец «Время», в котором оно увеличивается каждые 30 минут (это работает)
Как я:
Объедините два кадра данных вместе (Bckgd_env2 и bulk_Fe2). В «bulk_Fe2» глубина увеличивается на 1 м, а в «Bckgd_env2» глубина увеличивается на 0,8 м. Могу ли я получить наиболее близкое совпадение «Глубины», извлечь dFe_env на этой глубине и создать новый фрейм данных с глубиной, временем и dFe_env вместе?
library(dplyr) Depth <- c(0, 2, 20, 50, 100, 500, 800, 1000, 1200, 1500) dFe_env <- c(0.2, 0.2, 0.3, 0.4, 0.2, 0.1, 0.1, 0.1, 0.1, 0.1) bulk_Fe <- data.frame(Depth, dFe_env) summary(bulk_Fe) is.data.frame(bulk_Fe) do_interp <- function(dat, Depth = seq(0,1500, by=1)) { out <- tibble(Depth = Depth) for (var in c("dFe_env")) { out[[var]] <- tryCatch(approx(dat$Depth, dat[[var]], Depth)$y, method="ngb", error = function(e) NA_real_) } out } bulk_Fe2 <- bulk_Fe %>% do(do_interp(.)) bulk_Fe2 summary(bulk_Fe2) D0 <- 0 #Starting depth T0 <- 0 #Starting time of the experiment r <- 40 #sinking rate per day r_30min <- r/48 #sinking speed every 30 minutes (There are 48 x 30 minute intervals in 24 hours) days <- round(1501/(r)) #days 1501 is maximum depth time <- days * 24 * 60 #minutes n_steps <- 1501/r_30min Bckgd_env2 <- data.frame(Depth =seq(from = D0, by= r_30min, length.out = n_steps + 1), Time = seq(from = T0, by= 30, length.out = n_steps + 1)) head(Bckgd_env2) round(Bckgd_env2, digits = 1) Bckgd_env3 <- merge(Bckgd_env2, bulk_Fe2) Bckgd_env3 plot(Bckgd_env2$dFe_env ~ Bckgd_env2$Depth, ylab="dFe (nmol/L)", xlab="Depth (m)", las=1)