使用来自同一数据框的数据填充data.frame中的缺失值

时间:2012-07-16 20:37:54

标签: r dataframe fill na

我正在尝试使用最近的列数据回填一个完全外连接的表。

我的数据框架看起来像.. (没有行的两边都是NA,表格按日期排序)。

              date     X         Y
2012-07-05 00:01:19   0.0122     NA
2012-07-05 03:19:34   0.0121     NA
2012-07-05 03:19:56   0.0121   0.027
2012-07-05 03:20:31   0.0121     NA
2012-07-05 04:19:56   0.0121   0.028
2012-07-05 04:20:31   0.0121     NA
2012-07-05 04:20:50   0.0121     NA
2012-07-05 04:22:29   0.0121   0.027
2012-07-05 04:24:37   0.0121     NA
2012-07-05 20:48:45   0.0121     NA
2012-07-05 23:02:34    NA      0.029
2012-07-05 23:30:45    NA      0.029

有了这个,我期待着......

  1. 保留非数据缺失的行。
  2. 如果任何一方缺失(NA),则将其填入“最近的前一行”,该行具有有效的相反方的值。
  3. 结果,我希望表格看起来像......

                  date     X         Y
    2012-07-05 00:01:19   0.0122     NA
    2012-07-05 03:19:34   0.0121     NA
    2012-07-05 03:19:56   0.0121   0.027
    2012-07-05 03:20:31   0.0121   0.027
    2012-07-05 04:19:56   0.0121   0.028
    2012-07-05 04:20:31   0.0121   0.028
    2012-07-05 04:20:50   0.0121   0.028
    2012-07-05 04:22:29   0.0121   0.027
    2012-07-05 04:24:37   0.0121   0.027
    2012-07-05 20:48:45   0.0121   0.027
    2012-07-05 23:02:34   0.0121   0.029
    2012-07-05 23:30:45   0.0121   0.029
    

    我可以使用哪种R命令来实现这一目标?

2 个答案:

答案 0 :(得分:5)

使用na.locf

中的zoo
dat <- read.table(text="2012-07-05 00:01:19   0.0122     NA
2012-07-05 03:19:34   0.0121     NA
2012-07-05 03:19:56   0.0121   0.027
2012-07-05 03:20:31   0.0121     NA
2012-07-05 04:19:56   0.0121   0.028
2012-07-05 04:20:31   0.0121     NA
2012-07-05 04:20:50   0.0121     NA
2012-07-05 04:22:29   0.0121   0.027
2012-07-05 04:24:37   0.0121     NA
2012-07-05 20:48:45   0.0121     NA
2012-07-05 23:02:34    NA      0.029
2012-07-05 23:30:45    NA      0.029")

require("zoo")
na.locf(dat)
#           V1       V2     V3    V4
#1  2012-07-05 00:01:19 0.0122  <NA>
#2  2012-07-05 03:19:34 0.0121  <NA>
#3  2012-07-05 03:19:56 0.0121 0.027
#4  2012-07-05 03:20:31 0.0121 0.027
#5  2012-07-05 04:19:56 0.0121 0.028
#6  2012-07-05 04:20:31 0.0121 0.028
#7  2012-07-05 04:20:50 0.0121 0.028
#8  2012-07-05 04:22:29 0.0121 0.027
#9  2012-07-05 04:24:37 0.0121 0.027
#10 2012-07-05 20:48:45 0.0121 0.027
#11 2012-07-05 23:02:34 0.0121 0.029
#12 2012-07-05 23:30:45 0.0121 0.029

答案 1 :(得分:2)

也许你应该试试这个

> library(zoo)
> na.locf(Data)
                x     y
2012-07-17 0.0122  <NA>
2012-07-18 0.0121  <NA>
2012-07-19 0.0121 0.027
2012-07-20 0.0121 0.027
2012-07-21 0.0121 0.028
2012-07-22 0.0121 0.028
2012-07-23 0.0121 0.028
2012-07-24 0.0121 0.027
2012-07-25 0.0121 0.027
2012-07-26 0.0121 0.027
2012-07-27 0.0121 0.029
2012-07-28 0.0121 0.029

其中Data是您的data.frame