2012-01-30 42 views
0

我有一個名爲prices_df到我添加一個額外的列和有條件地填充的基礎上,在相同的DF另一列的內容數據幀,具有1有條件填補ř數據幀列中,從一個參考列偏移

prices_df$itd_1 <- c(NA) 
prices_df$itd_1 <- with(prices_df , ifelse(V2.1==1 , 1, NA)) 

其中在最後一欄給出了1因而

2005-11-16,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,NA,1 
2005-11-17,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA 
2005-11-18,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA 

不過,我還要做的就是消除這種有條件補使得輸出將是,例如,1列兩行晚於參考列,或者可能早於或晚於x行,例如

2005-11-16,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,NA,NA 
2005-11-17,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA 
2005-11-18,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,1 

如何調整給定的代碼以實現這種偏移條件填充?

+0

我首先創建對應於你的一個「滯後」列偏移,然後將不符合標準的值設置爲NA。快速搜索表示將數據轉換爲時間序列對象使得這種滯後更加容易。例如,請參閱[這裏](http://stackoverflow.com/questions/5364057/create-new-lagged-data-frame-column)。 – Chase 2012-01-30 18:21:20

回答

1

最好的辦法是:

  1. 創建一個時間序列對象(我喜歡動物園)
  2. 具有滯後創建額外的列(或偏移,你稱呼它)
  3. 合併都在一起

    prices_df <- read.table(text="2005-11-16,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,NA 
    2005-11-17,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA 
    2005-11-18,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA", header=F, sep=",") 
    
    library(zoo) 
    prices_df.zoo <-zoo(prices_df[,-1],as.Date(prices_df[,1])) 
    itd_1 <- lag(with(prices_df.zoo , ifelse(V6==1 , 1, NA)),-2) #lag = -2 
    prices_df.zoo <-merge(prices_df.zoo, itd_1) 
    
    > prices_df.zoo 
          V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 itd_1 
    2005-11-16 NA NA NA NA 1 NA NA NA NA NA NA NA NA 
    2005-11-17 NA NA NA NA NA NA NA NA NA NA NA NA NA 
    2005-11-18 NA NA NA NA NA NA NA NA NA NA NA NA  1