仅在时间序列中填充有限数量的 NA

2023-12-24

有什么办法可以让我们填补NAs in a zoo or xts数量有限的对象NA向前。换句话说就像填充NA最多连续 3 个NAs,然后保留NA从第 4 个值开始直到有效数字。

像这样的东西。

library(zoo)
x <- zoo(1:20, Sys.Date() + 1:20)
x[c(2:4, 6:10, 13:18)] <- NA
x

2014-09-20 2014-09-21 2014-09-22 2014-09-23 2014-09-24 2014-09-25 2014-09-26 
         1         NA         NA         NA          5         NA         NA 
2014-09-27 2014-09-28 2014-09-29 2014-09-30 2014-10-01 2014-10-02 2014-10-03 
        NA         NA         NA         11         12         NA         NA 
2014-10-04 2014-10-05 2014-10-06 2014-10-07 2014-10-08 2014-10-09 
        NA         NA         NA         NA         19         20

所需的输出将是变量 n = 3 的值

2014-09-20 2014-09-21 2014-09-22 2014-09-23 2014-09-24 2014-09-25 2014-09-26 
         1         1         1        1          5         5        5 
2014-09-27 2014-09-28 2014-09-29 2014-09-30 2014-10-01 2014-10-02 2014-10-03 
        5         NA         NA         11         12         12        12 
2014-10-04 2014-10-05 2014-10-06 2014-10-07 2014-10-08 2014-10-09 
        12         NA         NA         NA         19         20

我尝试过很多组合na.locf(x, maxgap = 3)等没有多大成功。我可以创建一个循环来获得所需的输出,我想知道是否有矢量化的方式来实现这一点。

fillInTheBlanks <- function(v, n=3) {
  result <- v
  counter0 <- 1
  for(i in 2:length(v)) {
    value <- v[i]
    if (is.na(value)) {
      if (counter0 > n) {
        result[i] <- v[i]
      } else {  
        result[i] <- result[i-1]
        counter0 <- counter0 + 1
      } }   
    else {
      result[i] <- v[i] 
      counter0 <- 1
    }
  }
  return(result)
}

Thanks


这是另一种方法:

l <- cumsum(! is.na(x))
c(NA, x[! is.na(x)])[replace(l, ave(l, l, FUN=seq_along) > 4, 0) + 1]
# [1]  1  1  1  1  5  5  5  5 NA NA 11 12 12 12 12 NA NA NA 19 20

edit:我之前的回答要求x没有重复项。目前的答案没有。

基准

x <- rep(x, length.out=1e4)

plourde <- function(x) {
    l <- cumsum(! is.na(x))
    c(NA, x[! is.na(x)])[replace(l, ave(l, l, FUN=seq_along) > 4, 0) + 1]
}

agstudy <- function(x) {
    unlist(sapply(split(coredata(x),cumsum(!is.na(x))),
           function(sx){
             if(length(sx)>3) 
               sx[2:4] <- rep(sx[1],3)
             else sx <- rep(sx[1],length(sx))
             sx
           }))
}

microbenchmark(plourde(x), agstudy(x))
# Unit: milliseconds
#        expr   min     lq median     uq   max neval
#  plourde(x)  5.30  5.591  6.409  6.774 57.13   100
#  agstudy(x) 16.04 16.249 16.454 17.516 20.64   100
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅在时间序列中填充有限数量的 NA 的相关文章

  • 汇总表中各列的字符值比例

    在这种数据框中 df lt data frame w1 c A A B C A w2 c C A A C C w3 c C A B C B 我需要计算所有列中字符值的列内比例 有趣的是 以下代码适用于大型实际数据集 但对上述玩具数据会引发错
  • 如何返回包含最大值标签的向量

    我有一个 4 列数组 我想获得一个向量 其中每行包含包含该行最大值的列的标签 我可以在循环中执行此操作 但我想使用矩阵函数来提高速度 我怎样才能在不编写自己的库函数的情况下做到这一点 有一个函数可以做到这一点 如果x是你的矩阵 尝试max
  • 使用 RDCOMClient 搜索 Outlook 收件箱

    我尝试使用 RDCOMClient 在 Outlook 收件箱中搜索电子邮件中的特定主题 然后获取附件 我在一封电子邮件上进行了这项工作 但由于主题包含日期元素 我需要搜索成为一个类似的子句 但不太清楚这适合我的下面的查询 outlook
  • 使用 pkg:sjPlot 函数创建一个生成部分斜体单元格的数据框

    我正在尝试创建一个简单的数据表 其中 Coral taxon 列中的属名称为斜体 而 spp 列中的属名称为斜体 属名后面的部分不大写 我尝试使用 expression 函数对 Coral taxon 的每一行进行编码 但没有成功 sum
  • 如何在 R 中绘制一列与其余列的关系图

    我有一个数据集 其中 1 是时间 接下来的 14 个是幅度 我想在一张图表上散布所有大小与时间的关系 其中每个不同的列都是网格化的 分层在另一个之上 我想使用原始数据来制作这些图表 并单独制作它们 但只想执行此过程一次 数据集A 唯一的自变
  • 合并数据框而不重复行

    我想合并两个数据框 但如果有多个匹配项 则不想重复行 相反 我想总结一下那天的观察结果 来自 合并 提取两个数据框中与指定列匹配的行并将其连接在一起 如果有多个匹配项 则所有可能的匹配项各贡献一行 这是一些示例代码 days lt as d
  • 当有很多列时,使用 readr::read_csv() 导入数据时覆盖列类型

    我正在尝试使用 R 中的 readr read csv 读取 csv 文件 我导入的 csv 文件大约有 150 列 我只包含示例的前几列 我希望将第二列从默认类型 我执行 read csv 时为日期 覆盖为字符或其他日期格式 GIS Jo
  • R - 与 SpatialPolygonsDataFrame 对象相交的 SpatialLinesDataFrame 列表的嵌套循环

    我有一系列需要完成的步骤SpatialLinesDataFrame 此处的 线 基于对象与多特征中各个特征的关系SpatialPolygonsDataFrame 多边形 对象 简而言之 每个线列表元素源自单个面要素内部 并且可能会也可能不会
  • 如何使用 R 将每个文件的数据添加为附加行,从而将不同的 .csv 文件合并为一个完整的文件?

    我有几个不同的文件夹 它们都包含一个 csv 文件 所有这些 csv 文件都有一个单独的列 其中包含实验的一种条件的数据 我想以将每个文件的数据添加为新列的方式合并这些 csv 文件 目前 它看起来像这样 C1 csv 102 106 15
  • 跟踪循环迭代

    抛硬币 成功 你赢100 否则你输50 你会一直玩 直到你口袋里有钱a 的价值如何a在任何迭代中都被存储 a lt 100 while a gt 0 if rbinom 1 1 0 5 1 a lt a 100 else a lt a 50
  • R、Rcpp 与 Armadillo 中矩阵 rowSums() 与 colSums() 的效率

    背景 来自 R 编程 我正在扩展到 C C 形式的编译代码Rcpp 作为循环交换 以及一般的 C C 效果的实践练习 我实现了 R 的等效项rowSums and colSums 矩阵的函数Rcpp 我知道它们以 Rcpp 糖的形式存在 并
  • 如何在 R 中合并同名列表中的数据框?

    我有一个包含很多数据框的列表 如果它们具有相同的名称 我想合并它们 即合并所有具有相同名称 a 和 b 的数据框 像这样 a lt aaaaa b lt bbbbb c lt ccccc g lt list df1 lt data fram
  • 为什么数据帧上的 is.vector 不返回 TRUE?

    tl dr R 中的向量到底是什么 长版 R 中很多东西都是向量 例如 数字是长度为 1 的数值向量 is vector 1 1 TRUE 列表也是一个向量 is vector list 1 1 TRUE 好的 所以列表是一个向量 显然 数
  • R中的重叠矩阵

    我有以下数据框 id channel 1 a 1 b 1 c 2 a 2 c 3 a 我想创建并重叠矩阵 它基本上是一个方阵 行和列标签为 a b c 表中的每个条目显示每个通道共有多少个 id 例如 在上面的例子中 矩阵看起来像 a b
  • R - 计算 bin 中特定值的数量

    我有一个如下所示的数据框 df Value lt c 1 1 0 2 1 3 4 0 0 1 2 0 3 0 4 5 2 3 0 6 Sl lt c 1 20 df lt data frame Sl Value gt df Sl Value
  • Quantmod 的简单功能不再起作用

    我明天要交论文 我收到了一条关于 quantmod 的非常奇怪的错误消息 这是我在过去几周使用这个包时从未遇到过的 我无法导入特定于道琼斯指数 DJI 的数据 我收到以下错误消息 getSymbols DJI src yahoo from
  • purrr::可能函数可能无法与map2_chr函数一起使用

    我怀疑这是 purrr 包中的错误 但想先在 StackOverflow 中检查我的逻辑 在我看来 possibly功能在内部不起作用map2 chr功能 我正在使用 purrr 版本 0 2 5 考虑这个例子 library dplyr
  • R 闪亮仪表板中的动态重复条件面板

    我正在尝试创建一个动态条件面板 所以我的条件如下 在用户界面中输入 selectInput inpt Input Number seq 1 50 1 selectize FALSE 我的条件面板 UI 输入是 conditionalPane
  • 如何在 data.table 中分组后使用条件计算行数

    我有以下数据框 dat lt read csv s1 s2 v1 v2 a b 10 20 a b 22 NA a b 13 33 c d 3 NA c d 4 5 NA c d 10 20 dat gt A tibble 6 x 4 gt
  • 实现 XGboost 自定义目标函数

    我正在尝试使用 XGboost 实现自定义目标函数 在 R 中 但我也使用 python 所以有关 python 的任何反馈也很好 我创建了一个返回梯度和粗麻布的函数 它工作正常 但是当我尝试运行 xgb train 时它不起作用 然后 我

随机推荐

  • 在SSRS中将日期转换为YYYYMMDD格式的整数

    T SQL 中日期 Date 的以下转换在 SSRS 中的等效表达式是什么 CONVERT INT CONVERT CHAR Date 112 我需要将日期参数值转换为 YYYYMMDD 格式的整数 假设您有一个名为的日期参数YourDat
  • 如何使同级内联元素位于单独的行框中?

    div em style background color aqua Line box 1 em span style background color aquamarine another sibling line box 2 span
  • 如何在文件名中添加日期?

    from datetime import datetime date time now datetime now print now 2013 05 23 04 07 40 951726 tar tarfile open test tar
  • HBase 写入:批处理和 put(List) 哪个性能更好?

    我开始学习HBase来编写数据流 我使用 HTableInterface 并遇到性能问题 仅插入 500 行就花费了很多时间 我插入的每批 List 几乎需要 500 000 毫秒 使用 HTableInterface 批量写入 HTabl
  • 即使打开了“noflatten_results”标志,使用 GROUP BY 选择表时 BigQuery 也会展平结果

    我有一个包含重复记录的表 我想删除它们 我创建了一个名为 hash code 的列 它只是所有列的 sha1 哈希值 重复的行将具有相同的哈希码 一切都很好 除了当我尝试使用包含 GROUP BY 的查询创建新表时 我的表具有 RECORD
  • Swift 变量初始化

    我有一个关于 swift 变量初始化的问题 我有两种方法来初始化变量 作为 Objective C 中类的 属性 其中哪一个是最正确的 class Class var label UILabel init label UILabel or
  • Android 4.4.x WebView 使用 location.reload() 时在浏览器中打开一个选项卡

    所有这些都会打开一个带有我的应用程序网址的新选项卡 在浏览器中 location reload document location reload window location reload window location href win
  • 清单与类清单。这个 Scala 错误是什么意思?

    这个错误是什么意思 scala gt val a Array def x Int new def x 3
  • Dask 中的遮罩

    我只是想知道是否有人可以帮助我展示如何使用 dask 在掩码数组上应用 sum 或 mean 等函数 我希望仅计算没有掩码的值的数组的总和 平均值 Code import dask array as da import numpy as n
  • 无法更新 Play 商品详情

    尝试更新商店列表 但无法 无法找到构建的问题 我们在过去 3 个月内没有在清单文件中添加任何额外内容 由 Google Play 支持团队建议 从开发者控制台中删除所有草稿工件 然后等待 2 3 小时 如果您仍然无法联系上Google 控制
  • 如何查看nHibernate生成的SQL?

    如何查看nHibernate生成的SQL 1 2版 您可以在 app config web config 文件中添加如下内容 在 configSections 节点中 section type section 在配置节点中
  • 计算 PostgreSQL 中字符串中子字符串出现的次数

    如何计算 PostgreSQL 中字符串中子字符串出现的次数 Example 我有一张桌子 CREATE TABLE test user uid integer NOT NULL name text result integer CONST
  • iOS10 UNNotificationServiceExtension 未调用

    我正在实施新的 iOS10 扩展以使用丰富的通知 我试图在推送通知上测试它 但不起作用 我只是收到一个简单的通知 并且没有经历扩展 我做了官方网站和其他一些地方指定的所有操作 我的应用程序已启动并运行 并带有推送通知和正确的配置文件 我向我
  • 同步 Mercurial 存储库集合

    我在网络共享上有一组 Mercurial 存储库 为了启用离线工作 我需要在我的笔记本电脑上保存该集合的本地副本 以及在在线时同步这两个集合的简单方法 为此 我编写了一个快速脚本 自动将每个本地存储库与相应的远程存储库同步 推和拉 但它缺少
  • 清理本机反应项目

    如何清理反应本机项目 有什么方法可以像清理 xcode 项目一样清理 React Native 项目吗 任何帮助将不胜感激 一个反应原生项目是关于一个Xcode项目和一个安卓项目 对于纯js代码 不需要clean 所以 你需要的是 清理 X
  • 使用 Javascript 在帧之间传递数据

    我已经设置了一个简单的例子http ryanmalin co uk frames http ryanmalin co uk frames 如果您按 添加 它将把左侧框架中的表单数据粘贴到右侧框架中 当我将正确的框架 URL 更改为另一个域的
  • 在 JAX-RS Provider 中使用 @Context 向 CDI bean 提供上下文信息

    我有一些网络服务 JAX RS WildFly 9 Resteasy RequestScoped public class SomeService operations 现在我想提取上下文信息 例如用户代理 这可以使用 Context pr
  • jQuery - 从所选选项获取自定义属性

    鉴于以下情况
  • 使用批处理脚本附加文件夹名称并加 1

    我对批处理脚本的这一部分有点陌生 但我想做的是附加一堆文件夹名称并递增 1 同时尊重时间戳 即最新的文件夹在前 最旧的文件夹在最后 我看过其他脚本没有效果 Before Folder 1 Folder 2 Folder 3 Folder 4
  • 仅在时间序列中填充有限数量的 NA

    有什么办法可以让我们填补NAs in a zoo or xts数量有限的对象NA向前 换句话说就像填充NA最多连续 3 个NAs 然后保留NA从第 4 个值开始直到有效数字 像这样的东西 library zoo x lt zoo 1 20