【发布时间】:2020-11-03 18:38:52
【问题描述】:
我有一个数据框,其中第一列是时间,其余不同的数字变量有时具有 NA。
df <- read.table(text =
"Date column_A column_B
1 2019-10-15 5000 3500
2 2019-10-16 1000 1200
3 2019-10-17 5000 3500
4 2019-10-18 NA 1200
5 2019-10-19 NA 3500
6 2019-10-20 NA 1200
7 2019-10-21 5000 3500
8 2019-10-22 1000 1200
9 2019-10-23 5000 3500
10 2019-10-30 1000 1200
11 2019-11-01 1000 1200
12 2019-11-02 1000 1200
13 2019-11-03 1000 1200
14 2019-11-04 1000 1200
15 2019-11-05 1000 1200
" , header = TRUE)
df$Date <- as.Date.POSIXct(df$Date, tz= "Europe/Berlin")
我需要做的是及时了解每个连续值范围或 NA 的长度。目前我在做
df <- df %>%
mutate(Var1_interval_grp = cumsum(c(1, abs(diff(is.na(df[, column_A])))))) %>%
group_by(Var1_interval_grp) %>%
mutate(Range_Var1 = diff(range(Date)))
这给了我组的第一个元素和最后一个元素之间的时间差,尽管我需要的是一个组的最后一个元素和前一个组的最后一个元素之间的时间差。这显然会导致第一组出现问题,因为没有前一组。
每个组 Range_Var1 的结果是 2、2 和 15,尽管我需要的是 2、3 和 16。
希望解释清楚。
提前致谢
【问题讨论】: