我的数据集超过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的新手并尝试绕着数据集工作。我花了一整天努力让这个工作,但我不能。如果有人能看看并帮助我,我将不胜感激。
答案 0 :(得分: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
})
(我认为interdate2a
或interdate2b
应该是您想要的,只是不确定您的描述中的哪一个。)
答案 1 :(得分: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