Add a new column, based on data in between zeroes

后端 未结 3 1236
心在旅途
心在旅途 2020-12-21 10:57

I have power data (Power) collected every second (Sample). My data.frame is therefore structured as follows:

Test <- data.frame(Sample = c(1:20), 
                


        
3条回答
  •  庸人自扰
    2020-12-21 11:14

    An option with base R:

    indx1 = with(rle(Test$Power>0),rep(values,lengths))
    indx2 = with(rle(Test$Power>0),rep(cumsum(values),lengths))
    Test$Effort[indx1] = paste0("Effort",indx2[indx1])
    Test$Effort[!indx1]="Rest"
    

    Output:

       Sample Power  Effort
    1       1     0    Rest
    2       2     0    Rest
    3       3     0    Rest
    4       4     0    Rest
    5       5     0    Rest
    6       6    50 Effort1
    7       7    67 Effort1
    8       8   100 Effort1
    9       9    92 Effort1
    10     10     0    Rest
    11     11     0    Rest
    12     12     0    Rest
    13     13    36 Effort2
    14     14    89 Effort2
    15     15    36 Effort2
    16     16     0    Rest
    17     17     0    Rest
    18     18     0    Rest
    19     19    89 Effort3
    20     20    90 Effort3
    

    About 0.0038 seconds for 3,000 rows ;) Hope this helps!

提交回复
热议问题