【问题标题】:cumulative sum in R with conditionsR 中有条件的累积和
【发布时间】:2022-12-05 13:09:36
【问题描述】:

Signal3 列是我正在努力编写的代码。

这是代码:

library(tibble)
library(dplyr)
library(lubridate)
set.seed(1234)
df <- tibble(signal1 = c(0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0), 
             signal2 = rbinom(31, 1, 0.7), 
             signal3 = c(0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 0, 1, 2))

基本上,如果 signal1 == 1,那么我们开始计算 signal2 中的行中有多少个“1”(直到 signal2==0)。

【问题讨论】:

    标签: r dplyr tidyverse


    【解决方案1】:

    解决此问题的一种方法是使用dplyr包以创建一个新列,指示当前行是否对应于新“计数期”的开始(即,当信号1是 1).然后您可以使用润滑剂包以创建一个新列,指示每个计数期的持续时间。最后,您可以使用 dplyr 按计数周期的持续时间对数据进行分组,然后使用 summarize 函数统计每组内的行数。

    这是您如何执行此操作的示例:

    library(tibble)
    library(dplyr)
    library(lubridate)
    
    set.seed(1234)
    df <- tibble(signal1 = c(0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0), 
                 signal2 = rbinom(31, 1, 0.7), 
                 signal3 = c(0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 0, 1, 2))
    
    # Create a new column indicating whether the current row is the start of a new counting period
    df <- df %>%
      mutate(start_period = ifelse(signal1 == 1, 1, 0))
    
    # Create a new column indicating the duration of each counting period
    df <- df %>%
      group_by(start_period) %>%
      mutate(duration = seconds_to_period(sum(seconds(1))))
    
    # Group the data by the duration of the counting period and count the number of rows within each group
    df %>%
      group_by(duration) %>%
      summarize(count = n())
    

    这应该会给你你正在寻找的计数。请注意,此解决方案假定信号1在新的计数周期开始时始终为 1,并且信号2在计数周期结束时始终为 0。如果不是这种情况,您可能需要相应地调整代码。

    【讨论】:

      猜你喜欢
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-09
      • 1970-01-01
      相关资源
      最近更新 更多