2016-01-21 59 views
0

我已复制我的例子如下填充R:合并和两个dataframes上日期

x<-as.Date(c(as.Date('2015-01-01'):as.Date('2016-01-01')), origin='1970-01-01') 
dates<-as.Date(c(as.Date('2015-01-01'),as.Date('2015-03-04'),as.Date('2015-07-01')),origin='1970-01-01') 
values<-c(3,7,10) 

我想是一个输出数据帧在x特定日期,其中values被连接到最近,但历史,日期条目。例如:

x, value 
2015-01-01, 3 
2015-01-02, 3 
.... 
2015-03-04, 7 
2015-03-05, 7 
.... 
2015-07-01, 10 
2015-07-02, 10 
.... 
2016-01-01, 10 

我已经通过for循环目前实现这一点,但感觉慢,效率低下的窘况 - 我敢肯定,必须有R中的一些方式更自动地做到这一点?

回答

2

尝试类似的东西

x<-data.frame(x=as.Date(c(as.Date('2015-01-01'):as.Date('2016-01-01')), origin='1970-01-01')) 
dates<-as.Date(c(as.Date('2015-01-01'),as.Date('2015-03-04'),as.Date('2015-07-01')),origin='1970-01-01') 
values<-c(3,7,10) 

a=data.frame(dates,values) 
y=merge(x,a,by.x='x',by.y='dates',all.x=T) 
colnames(y)=c("x","value") 
test=function(i){ 

    if(is.na(y[i,2])){ 
    if(i==1) return(NA) 
    return(test(i-1)) 
    }else{ 
    return(y[i,2]) 
    } 
} 

y$value=sapply(1:nrow(y),test) 
+0

似乎做的工作!将适用于我的现实世界的问题,并看到:) 编辑:我刚刚意识到我已经简化了我的问题。您的解决方案对于所提出的问题是正确的,但我已经过分简化了我的问题。将看看我是否有办法让它更具代表性。 – Henry