【问题标题】:Replace missing value with previous value [duplicate]用以前的值替换缺失值[重复]
【发布时间】:2013-01-17 07:06:06
【问题描述】:
Event,Time,Bid,Offer
Quote,0.458338,9.77,9.78
Order,0.458338,NA,NA
Order,0.458338,NA,NA
Order,0.458338,NA,NA
Quote,0.458363,9.78,9.79
Order,0.458364,NA,NA

我有一个这样的数据框 我想编写一个高效的代码来用以前的报价报价和报价填写NA,时间是排序的,只有报价包含报价和报价字段(最好是矢量化)

原来如此

Event,Time,Bid,Offer
Quote,0.458338,9.77,9.78
Order,0.458338,9.77,9.78
Order,0.458338,9.77,9.78
Order,0.458338,9.77,9.78
Quote,0.458363,9.78,9.79
Order,0.458364,9.78,9.79

谢谢

【问题讨论】:

    标签: r zoo


    【解决方案1】:

    试试这个:

    # Last Observation Move Forward
    na.lomf <- function(object, na.rm = F) {
        na.lomf.0 <- function(object) {
            idx <- which(!is.na(object))
            if (is.na(object[1])) idx <- c(1, idx)
            rep.int(object[idx], diff(c(idx, length(object) + 1)))
        }    
        dimLen <- length(dim(object))
        object <- if (dimLen == 0) na.lomf.0(object) else apply(object, dimLen, na.lomf.0)
        if (na.rm) na.trim(object, sides = "left", is.na = "all") else object
    }
    

    【讨论】:

      【解决方案2】:

      zoo 包中的na.locf() 函数是您的朋友。 locf 代表“最后一个结转”。使用您的数据:

      dat <- read.table(text = "Event,Time,Bid,Offer
      Quote,0.458338,9.77,9.78
      Order,0.458338,NA,NA
      Order,0.458338,NA,NA
      Order,0.458338,NA,NA
      Quote,0.458363,9.78,9.79
      Order,0.458364,NA,NA
      ", header = TRUE, sep = ",")
      
      require(zoo)
      
      dat2 <- transform(dat, Bid = na.locf(Bid), Offer = na.locf(Offer))
      

      生产。

      > dat2
        Event     Time  Bid Offer
      1 Quote 0.458338 9.77  9.78
      2 Order 0.458338 9.77  9.78
      3 Order 0.458338 9.77  9.78
      4 Order 0.458338 9.77  9.78
      5 Quote 0.458363 9.78  9.79
      6 Order 0.458364 9.78  9.79
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-26
        • 2020-01-04
        相关资源
        最近更新 更多