我试图计算一个指数,但我仍然坚持暗示日期的公式步骤。
以下是我输入的一部分:
YEAR RN DATE NOM SITE LONG SP SUMNB NB100
2010 RNN157 2010-04-22 COMBE LAVAUX-JEAN ROLAND RNN157-Combe Lavaux 01 Sentier des crêtes 111 Anthocharis cardamines (Linnaeus, 1758) 1 0.9009009
2010 RNN157 2010-04-26 COMBE LAVAUX-JEAN ROLAND RNN157-Combe Lavaux 01 Sentier des crêtes 111 Anthocharis cardamines (Linnaeus, 1758) 1 0.9009009
2010 RNN157 2010-03-22 COMBE LAVAUX-JEAN ROLAND RNN157-Combe Lavaux 01 Sentier des crêtes 111 Anthocharis cardamines (Linnaeus, 1758) 0 0.0000000
2010 RNN157 2010-09-29 COMBE LAVAUX-JEAN ROLAND RNN157-Combe Lavaux 01 Sentier des crêtes 111 Anthocharis cardamines (Linnaeus, 1758) 0 0.0000000
2010 RNN157 2010-05-18 COMBE LAVAUX-JEAN ROLAND RNN157-Combe Lavaux 06 Friches parc de nuit 111 Anthocharis cardamines (Linnaeus, 1758) 1 0.9009009
2010 RNN157 2010-04-15 COMBE LAVAUX-JEAN ROLAND RNN157-Combe Lavaux 06 Friches parc de nuit 111 Anthocharis cardamines (Linnaeus, 1758) 0 0.0000000
2010 RNN157 2010-09-29 COMBE LAVAUX-JEAN ROLAND RNN157-Combe Lavaux 06 Friches parc de nuit 111 Anthocharis cardamines (Linnaeus, 1758) 0 0.0000000
对于每个YEAR / SITE / SP子集中的每一行,我需要计算行日期和上一行日期之间的时差((行x) - (行x-1) )。然后结果将存储在一个新列中。
我在SO上发现了一些允许计算行位置的函数,但由于我使用日期,并且由于不明原因,它会返回1970年的日期。
>DF[, DIFF := DATE - c(NA, DATE[seq_len(.N-1)])][]
SP SUMNB NB100 DIFF
Anthocharis cardamines (Linnaeus, 1758) 1 0.9009009 <NA>
Anthocharis cardamines (Linnaeus, 1758) 1 0.9009009 1970-01-05
Anthocharis cardamines (Linnaeus, 1758) 0 0.0000000 1969-11-27
Anthocharis cardamines (Linnaeus, 1758) 0 0.0000000 1970-07-11
Anthocharis cardamines (Linnaeus, 1758) 1 0.9009009 1969-08-20
Anthocharis cardamines (Linnaeus, 1758) 0 0.0000000 1969-11-29
Anthocharis cardamines (Linnaeus, 1758) 0 0.0000000 1970-06-17
我还没有达到我在tapply函数中添加此公式的程度,以便将其应用于子集。
由于我没有将它与difftime()混合使用,你对我如何在几天内获得差异有所了解吗?
答案 0 :(得分:1)
?Dates
表示:
日期表示为自1970-01-01以来的天数 早期日期的负值。
因此DIFF
中的值是以天为单位的日期差异,然后将其转换为日期对象。
diff()
出了什么问题?
# example data
set.seed(1)
dates <- seq(as.Date("2012-01-01"), as.Date("2013-12-31"), by="day")
dates <- dates[sort(sample(1:length(dates), size=length(dates)*.50))]
DF <- data.frame(DATES=dates)
# date diffs
DF <- transform(DF, DIFF = c(NA, diff(DATES)))
# DATES DIFF
# 1 2012-01-09 NA
# 2 2012-01-10 1
# 3 2012-01-13 3
# 4 2012-01-16 3
# 5 2012-01-22 6
# 6 2012-01-24 2