-1

我有一个包含 2000 多行和两列的数据集。我想从现有日期列创建两个新的间隔列。interdate1 是两个日期之间的差异,并在年份用完时结束。次年从 0 开始。而 interdate2 在遇到新的一年时继续而不重置为零。

数据集 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 的新手,并试图围绕数据集工作。我花了一整天的时间试图让它工作,但我做不到。如果有人可以看看并帮助我,我将不胜感激。

4

2 回答 2

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应该是您想要的,只是不确定您的描述中的哪一个。)

于 2013-10-19T23:42:52.533 回答
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
于 2013-10-19T23:38:55.627 回答