r - 当列值不准确时如何合并两个数据框?
问题描述
我有:
- 每 1 m 对 dFe_env 数据进行线性插值并创建一个数据框(可行)
- 以 30 分钟的间隔提取“深度”(基于下沉率)(这有效)
- 创建了一个“时间”列,它每 30 分钟增加一次(这有效)
我如何能:
将两个数据帧合并在一起(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.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)
解决方案
您已经构建了对连接有用的插值机制。但是您没有以正确的深度值构建它。这只是重新组织代码的问题。
从 buiding 开始Bckgd_env2
,然后才计算bulk_Fe2
和bulk_Fe3
:
bulk_Fe2 <- bulk_Fe %>% do(do_interp(., Depth=Bckgd_env2$Depth))
Bckgd_env3 <- merge(Bckgd_env2, bulk_Fe2)
推荐阅读
- android - Android SDK - 您是否需要下载带有 Android API 版本的源代码?
- oracle - 如何在 Oracle Apex 4.2 中上传多个文件
- c# - CefSharp - 是否可以将 IFrame.ViewSource() 保存到特定文件名中?
- asp.net-mvc - 将Web API数据加载到.NET Core App中“查看”页面上的“Slug”?
- html - 使用 css 更改悬停时的 src 图像
- wpf - 如何更改 ComboBox 的皮肤?
- centos - 在 KVM 主机上使用 iptables 设置 nat 时,无法路由到设置为在主机启动时自动启动的 VM
- javascript - 分组条形图下的对齐标签
- sql - SQL - 使用两个表中的属性进行选择
- c++ - g++ 编译器没有为未定义的方法生成错误/警告