2016-01-21 60 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