R 计算有条件的连续天数

标签 r date

我有下一个问题。如果我有下一个数据框

data<- data.frame(
        Time= c("2018-01-01", "2018-01-02", "2018-01-03", "2018-01-04", "2018-01-05"),
        TEN= c(10,20,11,12,16)
    )

我想将 TEN < 15 的连续天数作为新列 使用 R .

我试试
waves_min <- function(df, prop, min_value, min_days) {
    sum(with(rle(df$Temp > min_temp), values & lengths >= min_days))
}

但它返回该计数的总数,而不是每行的值。

有任何想法吗?

谢谢

最佳答案

dplyr + data.table::rleid :

library(dplyr)
library(data.table)

data %>%
  group_by(ID = data.table::rleid(TEN < 15)) %>%
  mutate(Consec_Days = if_else(TEN < 15, row_number(), 0L))

输出:
# A tibble: 7 x 4
# Groups:   ID [5]
  Time         TEN    ID Consec_Days
  <fct>      <dbl> <int>       <int>
1 2018-01-01    10     1           1
2 2018-01-02    20     2           0
3 2018-01-03    11     3           1
4 2018-01-04    12     3           2
5 2018-01-05    16     4           0
6 2018-01-06    17     4           0
7 2018-01-07    14     5           1
data.table :
setDT(data)
data[, Consec_Days := ifelse(TEN < 15, 1:.N, 0L), by = rleid(TEN < 15)]

输出:
         Time TEN Consec_Days
1: 2018-01-01  10           1
2: 2018-01-02  20           0
3: 2018-01-03  11           1
4: 2018-01-04  12           2
5: 2018-01-05  16           0
6: 2018-01-06  17           0
7: 2018-01-07  14           1

基础 R + data.table::rleid :
data$Consec_Days <- with(data, ave(TEN, data.table::rleid(TEN < 15), 
                                   FUN = function(x) ifelse(x < 15, seq_along(x), 0L)))

输出:
        Time TEN Consec_Days
1 2018-01-01  10           1
2 2018-01-02  20           0
3 2018-01-03  11           1
4 2018-01-04  12           2
5 2018-01-05  16           0
6 2018-01-06  17           0
7 2018-01-07  14           1

数据:
data <- data.frame(
  Time= c("2018-01-01", "2018-01-02", "2018-01-03", "2018-01-04", "2018-01-05", "2018-01-06", "2018-01-07"),
  TEN= c(10,20,11,12,16,17,14)
)

我在 OP 的示例数据中添加了更多行,以说明这些解决方案适用于所有情况。

关于R 计算有条件的连续天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54463950/

相关文章:

javascript - Javascript 中的错误日期

r - 在 R 中使用 ggplot() 时编写手动图例

r - 使用两个不同的数据框在堆叠面积图上施加线图

r - 根据窗口大小调整绘图形状

r - 如何为 R 中的主题建模(topicmodels、lda、tm)准备数据?

java.util.Date 的行为

javascript - 如何使用 moment 获取最近 3 周的日期范围?

删除置信区间虚线并修改图例

java - 如何检查 JSP 页面上的 "date value",因为我已经修改了 setter 中的日期(如果它为空)

Javascript:输入日期 - 当前日期功能接近但不太正确?