识别 R 中缺少日期的组

时间:2021-02-21 10:06:28

标签: r data.table

在 data.table 中,我试图确定连续缺失天数/行数超过 4 天的组。以下是一个小样本集,其中 B 组有一些缺失的行。

library(data.table)
dt <- structure(list(date = structure(c(17956L, 17959L, 17960L, 17961L, 
                                  17962L, 17963L, 17966L, 17967L, 17968L, 17969L, 17970L, 17973L, 
                                  17974L, 17975L, 17976L, 17977L, 17980L, 17981L, 17982L, 17983L, 
                                  17984L, 17956L, 17959L, 17960L, 17961L, 17962L, 17963L, 17966L, 
                                  17967L, 17968L, 17980L, 17981L, 17982L, 17983L, 17984L), class = c("IDate", "Date")), 
               group = c("A", "A", "A", "A", "A", 
                          "A", "A", "A", "A", "A", "A", "A", "A", 
                          "A", "A", "A", "A", "A", "A", "A", "A", 
                          "B", "B", "B", "B", "B", "B", "B", "B", 
                          "B", "B", "B", "B", "B", "B"), 
               value = c(43.7425, 
                         43.9625, 43.8825, 43.63, 43.125, 43.2275, 44.725, 45.2275, 45.4275, 
                         45.9325, 46.53, 47.005, 46.6325, 47.04, 48.7725, 47.7625, 47.185, 
                         46.6975, 47.1175, 47.18, 47.4875, 12.31, 12.51, 12.7, 12.4, 12.63, 
                         12.93, 13.18, 13.23, 13.35, 14.27, 14.5, 14.25, 13.88, 13.71)), 
          row.names = c(NA, -35L), class = c("data.table", "data.frame"))
dt

我想确定 B 组有超过 4 个连续缺失的日期/行。如果连续缺失的日期/行少于 4 天,那么我们不需要隔离这些组。

谢谢!

2 个答案:

答案 0 :(得分:2)

计算每个 group 中大于 3 的缺失日期的数量。

library(data.table)
dt[, .(n_miss = sum(diff(date) > 3)), group]

#   group n_miss
#1:     A      0
#2:     B      1

选择这些组。

dt[, .SD[sum(diff(date) > 3) >0], group]

答案 1 :(得分:2)

我们可以使用.I

library(data.table)
 dt[dt[, .I[!!sum(diff(date) > 3)], group]$V1]
相关问题