2013-10-19 45 views
-1

我有一個超過2000行,只有兩列的數據集。我想從現有的日期列中創建兩個新的間隔列。interdate1是兩個日期和年份之間的差異,當年結束時。從下一年的0開始。雖然interdate2在遇到新的一年時不會重置爲零而繼續。在R中減行明智

數據集A是我目前讀入R的數據,但數據集B是我想要的結果。

DatasetA 
date    cost 
3/20/1990   0.89 
3/21/1990   1.98 
3/22/1990   2.0 
6/24/1990   0.74 
1/18/1991   0.54 
1/20/1991   0.56 

預期結果

date    cost   interdate1 interdate2 
3/20/1990   0.89   0   0 
3/21/1990   1.98   1   1 
3/22/1990   2.0   1   1 
6/24/1990   0.74   2   2 
1/18/1991   0.54   0   189 
1/20/1991   0.56   2   190 

請我是新來的R和努力工作,我周圍的數據集的方式。我花了整整一天的時間試圖讓這個工作,但我不能。如果有人能夠看一眼並幫助我,請我感激。

+0

您確定您的輸入數據正確嗎?不應該將第4行的日期設置爲'「3/24/1990」'而不是interdate2的最後兩行是'300'和'302'?如果不是,我不知道你在說什麼。 –

+0

@ SimonO101那些不是我正在使用的原始數據集。但他們是這種形式,我相信你明白我的問題是什麼。謝謝 – user18143

+0

不,沒有真實數據就不明顯。日差可能意味着兩件事情:連續行之間的日數或第一行的天數。手動計算這些數據並更新您的問題應該不會太困難。這將澄清任何疑問。 – flodel

回答

0
df1$date<-as.Date(df1$date,"%m/%d/%Y") 
    df1$interdate2<-df1$date - df1$date[1] 
x<-as.Date("1/01/1991","%m/%d/%Y") 
df1$interdate1<-with(df1,ifelse(date<x,date-date[1],date-date[5])) 

> df1 
     date cost interdate2 interdate1 
1 1990-03-20 0.89  0 days   0 
2 1990-03-21 1.98  1 days   1 
3 1990-03-22 2.00  2 days   2 
4 1990-06-24 0.74 96 days   96 
5 1991-01-18 0.54 304 days   0 
6 1991-01-20 0.56 306 days   2 
+0

我覺得'df1 $ interdate2'應該只是'df1 $ date - df1 $ date [1]'。 –

+0

謝謝。我嘗試了你建議的代碼,但是我得到了以下錯誤消息「r [i1] -r [-length(r):-(length(r) - lag + 1L]中的錯誤: – user18143

+0

@alexis_laz:謝謝。 – Metrics

1

大概就是這個樣子(但你必須由西蒙指出的未解決的問題)

padded.diff <- function(x) c(0L, diff(x)) 

within(DatasetA, { 
    date  <- as.Date(date, "%m/%d/%Y") 
    date.int <- as.integer(date) 
    interdate2b <- date.int - date.int[1] 
    interdate2a <- padded.diff(date.int) 
    interdate1 <- ave(date.int, format(date, "%Y"), FUN = padded.diff) 
    date.int <- NULL # do not report 
}) 

(我認爲interdate2ainterdate2b應該是你想要的,只是不知道哪一個,從你的描述。 )

+0

如果我爲interdate1在重新設置零時遇到新的一年,那麼它只是減去以前的日期,並繼續例如從12/31/1990移動到01/03/1991,而不是從1991年的0開始計數與12/03/91和01/03/1991之間的差異,並返回值3. – user18143

+0

剛剛描述的是我的'interdate2a'。 – flodel

+0

interdate1和interdate2a產生類似的輸出 – user18143