【发布时间】:2014-01-23 04:21:44
【问题描述】:
我正在尝试查找第一个日期(每组)在一周内以及下一周有记录。周不是从星期一开始,而是定义为 7 天。
假设日期是第一周的第一天,我正在尝试测试第二个“周”中的日期记录数是否大于一个。
library(data.table)
dt=data.table(date=c(1,9,10,15,18,3,4,7,7,19,21,27),
group=c(rep("a", 5), rep("b",7)))
> dt
date group
1: 1 a
2: 9 a
3: 10 a
4: 15 a
5: 18 a
6: 3 b
7: 4 b
8: 7 b
9: 7 b
10: 19 b
11: 21 b
12: 27 b
适用于 data.frame 的 for 循环如下所示:
df <- data.frame(dt)
for(i in 1:length(df$date)){
df$count[i] <- sum(df$date >= df$date[i] + 7 &
df$date < df$date[i] + 14 &
df$group == df$group[i])
}
> df
date group count
1 1 a 2
2 9 a 1
3 10 a 1
4 15 a 0
5 18 a 0
6 3 b 0
7 4 b 0
8 7 b 1
9 7 b 1
10 19 b 1
11 21 b 0
12 27 b 0
计数大于 0 的每个组的第一个日期会给我第一周的开始日期,即“a”组中的 1 和“b”组中的 7。
我的真实data.table有超过一千万行,所以理想情况下我想要一个类似于上面for循环的函数,所以我可以这样做:
dt[, date/sum(date), by=group]
问题是我不明白如何创建一个适用于 data.table 的带有索引的函数。非常感谢任何帮助。
【问题讨论】:
-
您能详细解释一下
dt[, date/sum(date), by=group]吗?你期待什么样的输出?计数有什么用?
标签: r date indexing data.table