2013-03-01 72 views
3

在R I有一个数据帧“closeValues” 它被如下缺失值添加到数据帧

>closeValues 
      date  value 
    1 1980-12-10  5 
    2 1980-12-15  8 
    3 1980-12-18  7 
    4 1980-12-20  1 

但我需要填补值的字段“值”与以前的值,如果“日期”丢失。 实际上我需要以下输出

>closeValues 
    date  value 
1 1980-12-10  5 
2 1980-12-11  5 
3 1980-12-12  5 
4 1980-12-13  5 
5 1980-12-14  5 
6 1980-12-15  8 
7 1980-12-16  8 
8 1980-12-17  8 
9 1980-12-18  7 
10 1980-12-19  7 
11 1980-12-20  1 

是有可能在R'

+1

看一看http://stackoverflow.com/questions/ 3555526/R-灌装失踪日期-IN-A-时间序列。 – 2013-03-01 10:40:54

回答

3

zoo包使用na.locf,你可以这样做:

dat1 <- data.frame(date = seq(as.Date('1980-12-10'),as.Date('1980-12-20'),1)) 
## the merge will fill dat1 with NA, and na.locf do the rest 
na.locf(zoo(merge(dat1,dat,all.x=T))) 
    date  value 
1 1980-12-10 5 
2 1980-12-11 5 
3 1980-12-12 5 
4 1980-12-13 5 
5 1980-12-14 5 
6 1980-12-15 8 
7 1980-12-16 8 
8 1980-12-17 8 
9 1980-12-18 7 
10 1980-12-19 7 
11 1980-12-20 1 

PS请提供一个重复的例子,下一次。俞可以这样写:

dat <- data.frame(date = as.Date(c('1980-12-10','1980-12-15', 
            '1980-12-18','1980-12-20')), 
        value=c(5,8,7,1)) 

或者

dput(dat) 
structure(list(date = structure(c(3996, 4001, 4004, 4006), class = "Date"), 
    value = c(5, 8, 7, 1)), .Names = c("date", "value"), row.names = c(NA, 
-4L), class = "data.frame") 
+0

非常感谢您的回答,先生。 – 2013-03-01 11:24:43

1

这可能你想在基础R什么:

df.1 <- read.table(text=' 
      DATE VALUE 
     1980-12-10  5 
     1980-12-15  8 
     1980-12-18  7 
     1980-12-20  1', header=T, colClasses=c('character', 'numeric')) 

df.1$DATE2 <- as.Date(df.1$DATE) 

df.1$diffs <- c(as.numeric(diff(df.1$DATE2)),1) 

df.2 <- df.1[rep(1:nrow(df.1),df.1$diffs),] 

df.2$running.count = sequence(rle(df.2$VALUE)$lengths) 

df.2$DATE3 <- df.2$DATE2 + (df.2$running.count-1) 
df.2 

#   DATE VALUE  DATE2 diffs running.count  DATE3 
# 1 1980-12-10  5 1980-12-10  5    1 1980-12-10 
# 1.1 1980-12-10  5 1980-12-10  5    2 1980-12-11 
# 1.2 1980-12-10  5 1980-12-10  5    3 1980-12-12 
# 1.3 1980-12-10  5 1980-12-10  5    4 1980-12-13 
# 1.4 1980-12-10  5 1980-12-10  5    5 1980-12-14 
# 2 1980-12-15  8 1980-12-15  3    1 1980-12-15 
# 2.1 1980-12-15  8 1980-12-15  3    2 1980-12-16 
# 2.2 1980-12-15  8 1980-12-15  3    3 1980-12-17 
# 3 1980-12-18  7 1980-12-18  2    1 1980-12-18 
# 3.1 1980-12-18  7 1980-12-18  2    2 1980-12-19 
# 4 1980-12-20  1 1980-12-20  1    1 1980-12-20