在 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 天,那么我们不需要隔离这些组。
谢谢!
答案 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]