问题描述
我有:
我如何:
-
将两个数据帧合并在一起(Bckgd_env2和bulk_Fe2)。在“ bulk_Fe2”中,深度增加1m,在“ Bckgd_env2”中,深度增加0.8m。我能否获得最接近的“深度”匹配,提取该深度的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.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)
解决方法
您已经建立了插值机制,这对于连接很有用。但是,您没有以正确的深度值构建它。只需重组代码即可。
从建立Bckgd_env2
开始,然后才计算bulk_Fe2
和bulk_Fe3
:
bulk_Fe2 <- bulk_Fe %>% do(do_interp(.,Depth=Bckgd_env2$Depth))
Bckgd_env3 <- merge(Bckgd_env2,bulk_Fe2)