根据 R 中的日期通过线性插值进行数据插补

2024-01-10

我有一个来自不同地块的矿物氮值的大型数据集,其中包括一些我们无法采样的日期缺失的数据。众所周知,土壤中的矿物质氮值会发生变化linearly采样之间。

为了简化起见,我创建了一个数据框,其中有 10 个图,其中有 4 个日期(它们之间的距离不同),其中一个日期缺少数据:

df <- data.frame(plot= c(1,2,3,4,5,6,7,8,9,10),
                  date = c("2020-10-01", "2020-10-01","2020-10-01","2020-10-01","2020-10-01","2020-10-01","2020-10-01","2020-10-01","2020-10-01","2020-10-01",
                           "2020-10-08", "2020-10-08","2020-10-08","2020-10-08","2020-10-08","2020-10-08","2020-10-08","2020-10-08","2020-10-08","2020-10-08",
                           "2020-10-29","2020-10-29","2020-10-29","2020-10-29","2020-10-29","2020-10-29","2020-10-29","2020-10-29","2020-10-29","2020-10-29",
                           "2020-11-05","2020-11-05","2020-11-05","2020-11-05","2020-11-05","2020-11-05","2020-11-05","2020-11-05","2020-11-05","2020-11-05"),
                  Nmin = c(100, 120,  50,  60,  70,  80, 100,  70,  30,  50,  90, 130,  60,  60,  60,  90, 105,  60,  25,  40,  NA,  NA,  NA,  NA,  NA,  NA,  
                           NA,  NA,  NA,  NA, 50, 170, 100, 60,  20, 130, 125,  20,   5,   0))
df$date <- as.Date(df$date, format="%d.%m.%Y")
df$Nmin <- as.numeric(df$Nmin)

有没有一个函数可以计算Nmin的缺失值情节方面并考虑到采样之间的时间(日期)?


Using approx.

df <- transform(df, flag=ifelse(is.na(Nmin), 1, 0))  ## set flag for sake of identification

res <- by(df, df$plot, transform, Nmin=approx(date, Nmin, date)$y) |> unsplit(df$plot)
res
#    plot       date Nmin flag
# 1     1 2020-10-01  100    0
# 2     2 2020-10-01  120    0
# 3     3 2020-10-01   50    0
# 4     4 2020-10-01   60    0
# 5     5 2020-10-01   70    0
# 6     6 2020-10-01   80    0
# 7     7 2020-10-01  100    0
# 8     8 2020-10-01   70    0
# 9     9 2020-10-01   30    0
# 10   10 2020-10-01   50    0
# 11    1 2020-10-08   90    0
# 12    2 2020-10-08  130    0
# 13    3 2020-10-08   60    0
# 14    4 2020-10-08   60    0
# 15    5 2020-10-08   60    0
# 16    6 2020-10-08   90    0
# 17    7 2020-10-08  105    0
# 18    8 2020-10-08   60    0
# 19    9 2020-10-08   25    0
# 20   10 2020-10-08   40    0
# 21    1 2020-10-29   60    1
# 22    2 2020-10-29  160    1
# 23    3 2020-10-29   90    1
# 24    4 2020-10-29   60    1
# 25    5 2020-10-29   30    1
# 26    6 2020-10-29  120    1
# 27    7 2020-10-29  120    1
# 28    8 2020-10-29   30    1
# 29    9 2020-10-29   10    1
# 30   10 2020-10-29   10    1
# 31    1 2020-11-05   50    0
# 32    2 2020-11-05  170    0
# 33    3 2020-11-05  100    0
# 34    4 2020-11-05   60    0
# 35    5 2020-11-05   20    0
# 36    6 2020-11-05  130    0
# 37    7 2020-11-05  125    0
# 38    8 2020-11-05   20    0
# 39    9 2020-11-05    5    0
# 40   10 2020-11-05    0    0

我们来看看剧情吧。

clr <- rainbow(10)
with(res, plot(Nmin ~ date, type='n'))
by(res, res$plot, with, points(jitter(Nmin) ~ date, type='b', pch=ifelse(flag == 1, 21, 16), col=clr[plot], bg='white'))
legend('topleft', legend=paste('plot', 1:10), lty=1, col=clr, ncol=4, bty='n', cex=.7)

Note:对于非线性插值/外推,请参阅这个答案 https://stackoverflow.com/a/72963168/6574038.


Data:

df <- structure(list(plot = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 
3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 
3, 4, 5, 6, 7, 8, 9, 10), date = structure(c(18536, 18536, 18536, 
18536, 18536, 18536, 18536, 18536, 18536, 18536, 18543, 18543, 
18543, 18543, 18543, 18543, 18543, 18543, 18543, 18543, 18564, 
18564, 18564, 18564, 18564, 18564, 18564, 18564, 18564, 18564, 
18571, 18571, 18571, 18571, 18571, 18571, 18571, 18571, 18571, 
18571), class = "Date"), Nmin = c(100, 120, 50, 60, 70, 80, 100, 
70, 30, 50, 90, 130, 60, 60, 60, 90, 105, 60, 25, 40, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, 50, 170, 100, 60, 20, 130, 125, 
20, 5, 0), flag = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0)), class = "data.frame", row.names = c(NA, -40L
))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据 R 中的日期通过线性插值进行数据插补 的相关文章

  • R 中舍入到下一个数量级的算法

    如果标题不清楚 我很抱歉 但我无法简洁地解释它 给定一个浓度向量 我想将最大值四舍五入到下一个数量级 即 345 到 1000 另外 我想将最小值四舍五入到较低的数量级 即 3 2 到 1 这些浓度也可能低于 1 因此例如 0 034 需要
  • 如何在有条件的情况下获得R中多列的中位数(根据另一列)

    我是 R 初学者 我想知道如何完成以下任务 我想用数据集所有列的中位数替换数据集的缺失值 但是 对于每一列 我想要某个类别的中位数 取决于另一列 我的数据集如下 structure list Country structure 1 5 La
  • 如何编写固定宽度的文件?

    我应该编写一个基于固定宽度列的特定格式的 txt 文件 例如 第 1 8 列中的第一个变量 第 9 15 列中的第二个变量 原始数据有不同的长度 它们必须放在指定列的右侧 例如 值 15 96 和 12 489 必须写入第一行和第二行的第1
  • k折交叉验证 - 如何自动获得预测?

    这可能是一个愚蠢的问题 但我只是找不到一个包来做到这一点 我知道我可以编写一些代码来获得我想要的东西 但如果有一个函数可以自动完成它那就太好了 所以基本上我想对 glm 模型进行 k 倍交叉验证 我想自动获取每个验证集的预测和实际值 因此
  • 无法在 Yahoo! 中输出 pubDate管道?

    在我在 Yahoo 上的 RSS 提要之一中Pipes 我使用 Date Formatter 模块并使用格式 K 来格式化日期 以便它们符合 pubDate 标准 在管道输出中 我的四个日期显示如下 Wed 25 Jul 2012 03 3
  • 更快地评估从右到左的矩阵乘法

    我注意到以二次形式评估矩阵运算右到左明显快于左到右在 R 中 取决于括号的放置方式 显然它们都执行相同的计算量 我想知道为什么会这样 这与内存分配有什么关系吗 A 5000 5000 B 5000 2 A matrix runif 5000
  • 时间序列,将月度数据改为季度

    现在我有一些每月数据 例如 1 1 90 620 2 1 90 591 3 1 90 574 4 1 90 542 5 1 90 534 6 1 90 545 etc 如果我使用 ts 函数 很容易将数据转换为时间序列结构 例如 Jan F
  • 在并行包中的 R 的 par*apply 函数内部使用 Rcpp 函数

    我试图了解背后发生的事情Rcpp sourceCpp 调用并行环境 最近 问题中部分解决了这个问题 在 Windows 上使用 parLapply 中的 Rcpp 函数 https stackoverflow com questions 2
  • 设置设备默认图形参数

    我经常喜欢在 IDE 中使用浅色文本和深色背景颜色主题 当我在 R 中绘制某些内容时 绘图的默认颜色方案是白色背景上的黑色文本 边框 点 我试图默认更改此设置 最好是默认从 R 调用的特定设备 X11cairo RStudioGD 同时保留
  • 字符串模板电子邮件中的日期格式

    我正在使用字符串模板创建电子邮件 但当我打印出日期时 它会打印出完整日期 例如 2010 年 4 月 28 日星期三 10 51 37 BST 我想以 dd mm yyyy 格式打印出来 但不知道如何在 st 文件中格式化它 我无法单独修改
  • 使用服务器中的 Shiny Reactive 作为 UI 输入

    我正在努力使用反应函数的结果作为 UI 的输入 目前 我主要使用 renderUI 随着应用程序变得更加复杂 它会降低性能 Using DetailsList items filtered Accounts columns columns
  • 在 dplyr 中,setdiff 和 anti_join 之间的本质区别是什么?

    我仍在学习 DataCamp for R 的课程 所以如果这个问题看起来很幼稚 请原谅我 考虑以下 非常做作的 示例 library dplyr library tibble type lt c Dog Cat Cat Cat name l
  • 如何计算由离散数据定义的表面下的体积?

    我需要确定由离散数据点表示的一系列表面下方的体积 在我的数据中 每个样本都作为数据帧列表中的单独数据帧存储 这是一些 小 示例数据 df1 lt data frame x c 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 y
  • 从字符串到日期的日期格式

    我正在使用上传的 csv 进行日期格式化 其中日期是具有以下格式的字符串 10 30 2021 8 41 PM 我试图在谷歌大查询中将其更改为 mm dd yyyy 但不断收到错误消息 提示 无效日期 或 无效日期时间 我尝试过使用子字符串
  • 在没有 OneDrive API 的情况下,无法在 Power BI 中使用 R 脚本在安全的 OneDrive 文件夹上写入 csv 文件

    我正在使用 R 在 Power BI 服务中编写一个脚本 该脚本会自动将特定数据集下载到 OneDrive 上的文件中 但是 我不断收到此错误 只能打开 URL 进行读取Error in file file ifelse append a
  • R 中计算滚动实现波动率的更快方法

    我想计算一组指数的滚动 20 天已实现波动率 这是我用来下载指数价格 计算每日收益和 20 天已实现波动率的代码 library quantmod library PerformanceAnalytics tickers c RUT STO
  • R: pi[[j]] 中的错误:下标越界——数据帧列表上的 rbind

    我正在尝试重新绑定一个大的数据帧列表 outputDfList 它是通过将一个复杂的函数应用于一个大表而生成的 您可以通过以下方式重新创建outputDfList df1 data frame randomseq chr15q22 1 tr
  • 如何与 R 包 sf 进行“完整”联合

    我尝试使用三个多边形之间的并集sf st union 下图中显示了 ArcGIS Overlay Union All 的结果 我希望通过使用 R 中的 sf 包获得与 OUTPUT 中五个不同多边形类似的结果 library sf a1 l
  • r - 如何在 normalizePath 中指定路径,或解决与其关联的此错误?

    我正在学习 R 并将其安装在我的办公室计算机上 我没有计算机的管理员权限 因为我什至必须致电IT人员进行安装 然后我安装一个包 一开始输入时不起作用 例如 install packages thepackage 错误信息是这样的 Error
  • python 函数返回 javascript date.getTime()

    我正在尝试创建一个简单的 python 函数 它将返回与 javascript 相同的值new Date getTime 方法 如所写here http www w3schools com js js dates asp javascrip

随机推荐

  • 我应该在 Python 中使用“公共”属性还是“公共”属性?

    在 Python 中 我有以下示例类 class Foo self attr 0 property def attr self return self attr attr setter def attr self value self at
  • 从 data.table 聚合返回多列[重复]

    这个问题在这里已经有答案了 我想用data table作为替代aggregate or ddply 因为这两种方法没有像希望的那样有效地扩展到大型对象 不幸的是 我还没有弄清楚如何让向量返回聚合函数在结果中生成多列data table 例如
  • Bootstrap 3:嵌套选项卡

    我试图将一个选项卡放在一个选项卡内 但是每当我单击内部嵌套选项卡时 整个内部嵌套选项卡行就会消失 这是 jsfiddle 中的示例 http jsfiddle net jNWMY 1 http jsfiddle net jNWMY 1 尝试
  • 创建原始数据包来欺骗 UDP 数据包

    我正在寻找使用 Java 欺骗 UDP 数据包 有没有好的 Java 库可以让您创建自己的原始套接字 我会使用一个 Java API 来包装libpcap http www tcpdump org libpcap 有一个 注入 功能 允许您
  • 如何不在nginx访问日志中记录get请求参数?

    我需要启用访问日志 但出于合规性原因 无法在访问日志中记录敏感 GET 请求参数的数据 虽然我知道 我可以解析日志 事后 并清理它们 但这不是一个可接受的解决方案 因为出于合规性原因 日志不能被篡改 如何防止 sensitive data
  • 正则表达式匹配除某些之外的所有集合

    我确定以前曾问过这个问题 但我似乎找不到它 或知道要搜索的正确措辞 基本上我想要一个匹配除连字符之外的所有非字母数字的正则表达式 所以基本上匹配 W 除了排除 我不知道如何从预制集中排除特定的 W是一个简写 w So w 一些背景知识 定义
  • 识别批处理文件的运行实例

    这些对我不起作用 有什么帮助可以明确纠正以下四个示例吗 即使我打开了三个 CMD exe EXAMPLE01 也只是回显 继续 示例 01 echo off wmic process where name cmd exe find cmd
  • 依赖于自身的 Spark 窗口函数

    假设我在 DataFrame 中有一列已排序的时间戳 我想编写一个函数 向该 DataFrame 添加一列 根据以下规则将时间戳切割成连续的时间片 从第一行开始并继续迭代到最后 对于每一行 如果您在当前组中走了 n 行 或者您在当前组中走了
  • 获取从星期日开始的周数

    我目前有这样的代码 我可以通过添加和减去按钮获取周数以及该周的开始 结束日 Date prototype getWeekNumber function var d new Date Date UTC this getFullYear thi
  • Razor:条件语句中的 标记引发错误

    if Model Property null
  • Jenkins“仅在构建成功时才运行”对于不成功的构建仍然运行

    我正在使用 Jenkins 进行持续集成 并且我有一些具有上游和下游构建连接的项目 我已选择Run only if build succeeds在每个项目的配置中 然而 构建后步骤仍然会因不稳定的构建而被触发 詹金斯版本是 1 480 3
  • 使用循环数组实现队列:调整循环数组大小的最佳方法是什么?

    我正在实施一个使用循环数组进行队列 我有点陷入困境resize 方法实现 当数组已满时 在 的里面enqueue 方法我检查数组的大小是否等于它的长度 并获取它是否已满 现在 我不再抛出异常 而是尝试调整数组的大小 问题是 我有两种情况要考
  • postgresql 中 array_agg 的子选择

    有没有办法在 Postgresql 9 2 的having子句中使用聚合函数的值 例如 我想得到每个monkey id第二高的number gt 123 也是第二高的数字 在下面的示例中 我想获取 monkey id 1 number 22
  • 使用 AddDistributedRedisCache 时设置 IDistributedCache.SetAsync 的过期时间

    我正在使用 net core api 2 1 和 aws redis 缓存 我没有找到设置过期时间的方法IDistributedCache SetAsync https learn microsoft com en us dotnet ap
  • 在 iOS 中使用相机检测物体并使用 ARKit 定位 3D 物体

    我在寻找什么 我的要求的简单解释是这样的 使用 ARKit 使用 iPhone 相机检测对象 找到这个物体在这个虚拟空间上的位置 使用 SceneKit 将 3D 对象放置在该虚拟空间上 3D 对象应该位于 标记 一个示例是使用相机检测 3
  • 方向改变时出现的键盘问题

    在我的应用程序中 我使用各种编辑文本和文本视图以及列表视图 现在我的问题是我的键盘在方向改变时再次出现 理想情况下 当用户最小化键盘时 设备倾斜时键盘应处于最小化状态 但它又出现了 我们如何处理这种情况 我的另一个问题是我的编辑文本之一是屏
  • Express js 应用程序与 nginx - 提供子文件夹时与静态文件发生冲突

    upstream app server localhost 3000 server If I comment this location out images are displayed on the website location jp
  • 从调用范围中提取变量的字符串格式化程序是不好的做法吗?

    我有一些代码可以进行大量的字符串格式化 通常 我最终会得到如下代码 format x x y y z z foo foo 我试图将大量变量插入一个大字符串中 是否有充分的理由不编写这样一个使用inspect模块查找要插值的变量 import
  • Unix 中的作业和进程有什么区别?

    和有什么区别job and a process在Unix 中 你能举个例子吗 作业是由 shell 启动的进程 shell 在作业表中跟踪这些内容 这jobs命令显示活动后台进程的列表 他们获得的作业规范编号不是进程的 PID 命令如fg使
  • 根据 R 中的日期通过线性插值进行数据插补

    我有一个来自不同地块的矿物氮值的大型数据集 其中包括一些我们无法采样的日期缺失的数据 众所周知 土壤中的矿物质氮值会发生变化linearly采样之间 为了简化起见 我创建了一个数据框 其中有 10 个图 其中有 4 个日期 它们之间的距离不