我有一个大的 data.frame 结构如下:
date torn_count torn_dpi
31-12-2014 1 0.001
28-12-2014 3 0.003
27-12-2014 1 0.001
22-12-2014 1 0.001
21-12-2014 1 0.001
20-12-2014 1 0.001
19-12-2014 1 0.001
18-12-2014 1 0.001
17-12-2014 3 0.003
15-12-2014 2 0.002
14-12-2014 1 0.001
13-12-2014 1 0.002
11-12-2014 5 0.104
10-12-2014 3 0.003
09-12-2014 1 0.001
08-12-2014 5 0.104
01-12-2014 5 0.014
30-11-2014 2 0.002
29-11-2014 1 0.001
26-11-2014 1 0.001
25-11-2014 2 0.045
24-11-2014 2 1.83
我正在尝试添加一个在连续几天内具有相同值并且在非连续几天内增加的索引。像这样的东西:
date torn_count torn_dpi index
31/12/2014 1 0.001 1
28/12/2014 3 0.003 2
27/12/2014 1 0.001 2
22/12/2014 1 0.001 3
21/12/2014 1 0.001 3
20/12/2014 1 0.001 3
19/12/2014 1 0.001 3
18/12/2014 1 0.001 3
17/12/2014 3 0.003 3
15/12/2014 2 0.002 4
14/12/2014 1 0.001 4
13/12/2014 1 0.002 4
如能就上述问题提供任何帮助,我们将不胜感激。
最佳答案
我们可以使用data.table
。我们将 'data.frame' 转换为 'data.table' (setDT(df1)
),将 'date' 转换为 Date
类,获取相邻元素之间的差异,检查它是否不等于 1,然后执行 cumsum
以创建“索引”列。
library(data.table)
setDT(df1)[, index:= cumsum(c(TRUE,abs(diff(as.Date(date, '%d-%m-%Y')))!=1))]
head(df1, 12)
# date torn_count torn_dpi index
# 1: 31-12-2014 1 0.001 1
# 2: 28-12-2014 3 0.003 2
# 3: 27-12-2014 1 0.001 2
# 4: 22-12-2014 1 0.001 3
# 5: 21-12-2014 1 0.001 3
# 6: 20-12-2014 1 0.001 3
# 7: 19-12-2014 1 0.001 3
# 8: 18-12-2014 1 0.001 3
# 9: 17-12-2014 3 0.003 3
#10: 15-12-2014 2 0.002 4
#11: 14-12-2014 1 0.001 4
#12: 13-12-2014 1 0.002 4
关于r - 如何为连续和非连续的日子创建索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33351341/