在R(data.table)中查找具有记录的连续两周的第一个日期

布拉姆·维瑟(Bram Visser)

我正在尝试查找第一个日期(每组),该日期是一个星期以及下一个星期的记录。每周从星期一开始,但定义为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的索引创建函数。任何帮助,不胜感激。

埃迪

我认为这可行:

# set the key for the rolling merges
setkey(dt, group, date)

# find start and end point of the intervals you want
start = dt[J(group, date + 7 ), .I, roll = -Inf, by = .EACHI]$I
end   = dt[J(group, date + 13), .I, roll =  Inf, by = .EACHI]$I

# if start is 0, the first condition is not satisfied, so set count to 0
dt[, count := (start != 0) * (end - start + 1)]

dt
#    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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在R(data.table)中查找具有记录的连续两周的第一个日期

来自分类Dev

在R中查找条纹的第一个和最后一个日期

来自分类Dev

R:按组逐列查找data.table中的第一个非NA观测值

来自分类Dev

R-在data.table中查找第一个非零元素的索引

来自分类Dev

R-在data.table中查找第一个非零元素的索引

来自分类Dev

如何在R中将数据仅连接到具有{data.table}的第一个匹配行

来自分类Dev

如何在R中将日期时间转换为一周中的第一个星期日

来自分类Dev

在data.frame列中查找第一个值[R]

来自分类Dev

在data.frame列中查找第一个值[R]

来自分类Dev

获取R中连续增加的数字的长度N的第一个序列的第一个元素

来自分类Dev

获取R中连续增加的数字的长度N的第一个序列的第一个元素

来自分类Dev

从r中记录的第一个日期开始,是否存在生成天数序列的函数?

来自分类Dev

在data.table中查找*所有*重复记录(不是全而是一个)

来自分类Dev

为data.table(r)中的每个ID选择第一个唯一匹配

来自分类Dev

R Data.Table复制组的第一个值

来自分类Dev

为每个R挑选第一个日期

来自分类Dev

用户ID出现在R中的数据框中的第一个日期

来自分类Dev

R:在data.frame中创建一个具有特定非连续条件的新列

来自分类Dev

R:如何查找字符串中的第一个数字

来自分类Dev

查找在R中重复N次的第一个元素

来自分类Dev

Data.table:加入ID和Date键,但要在第一个表中获得(或等于)日期键之前的最近日期

来自分类Dev

测量每天的第一个和最后一个位置记录与R中的动物之间的距离

来自分类Dev

测量每天的第一个和最后一个位置记录与R中的动物之间的距离

来自分类Dev

R:data.table,将组的第一个和最后一个值设置为NA

来自分类Dev

R-删除data.table中每个因子的第一个和最后一个字符

来自分类Dev

在R中,如果站点和日期在两个数据框中匹配,则从第一个数据框中提取行值

来自分类Dev

如果/否则:仅在R中不满足第一个条件后,才在设置的距离内选择第一个匹配记录

来自分类Dev

R对连续重复的奇数列表求和并删除除第一个列表外的所有列表

来自分类Dev

R对连续重复的奇数行求和,并除去除第一个之外的所有

Related 相关文章

  1. 1

    在R(data.table)中查找具有记录的连续两周的第一个日期

  2. 2

    在R中查找条纹的第一个和最后一个日期

  3. 3

    R:按组逐列查找data.table中的第一个非NA观测值

  4. 4

    R-在data.table中查找第一个非零元素的索引

  5. 5

    R-在data.table中查找第一个非零元素的索引

  6. 6

    如何在R中将数据仅连接到具有{data.table}的第一个匹配行

  7. 7

    如何在R中将日期时间转换为一周中的第一个星期日

  8. 8

    在data.frame列中查找第一个值[R]

  9. 9

    在data.frame列中查找第一个值[R]

  10. 10

    获取R中连续增加的数字的长度N的第一个序列的第一个元素

  11. 11

    获取R中连续增加的数字的长度N的第一个序列的第一个元素

  12. 12

    从r中记录的第一个日期开始,是否存在生成天数序列的函数?

  13. 13

    在data.table中查找*所有*重复记录(不是全而是一个)

  14. 14

    为data.table(r)中的每个ID选择第一个唯一匹配

  15. 15

    R Data.Table复制组的第一个值

  16. 16

    为每个R挑选第一个日期

  17. 17

    用户ID出现在R中的数据框中的第一个日期

  18. 18

    R:在data.frame中创建一个具有特定非连续条件的新列

  19. 19

    R:如何查找字符串中的第一个数字

  20. 20

    查找在R中重复N次的第一个元素

  21. 21

    Data.table:加入ID和Date键,但要在第一个表中获得(或等于)日期键之前的最近日期

  22. 22

    测量每天的第一个和最后一个位置记录与R中的动物之间的距离

  23. 23

    测量每天的第一个和最后一个位置记录与R中的动物之间的距离

  24. 24

    R:data.table,将组的第一个和最后一个值设置为NA

  25. 25

    R-删除data.table中每个因子的第一个和最后一个字符

  26. 26

    在R中,如果站点和日期在两个数据框中匹配,则从第一个数据框中提取行值

  27. 27

    如果/否则:仅在R中不满足第一个条件后,才在设置的距离内选择第一个匹配记录

  28. 28

    R对连续重复的奇数列表求和并删除除第一个列表外的所有列表

  29. 29

    R对连续重复的奇数行求和,并除去除第一个之外的所有

热门标签

归档