R通过读取当前行和上一行

时间:2015-10-28 16:49:03

标签: r data-analysis

我有一个看起来像这样的数据框

  

数据

Category          start_time(need to fill)   
Low
Low
Low
Low
Below Normal
Below Normal
Low
Below Normal
Below Normal
Below Normal

我需要将每一行与其前一行进行比较,以及类别是否已更改 我会用1.ie

填充该行的start_time变量
  

If(Category(Row)!= Category(Previous Row)然后设置Start_Time = 1

所以我的最终数据集shoudl看起来像这样

Category    Start Time 
Low              1 //Initially set to 1 
Low              0
Low              0
Low              0
Below Normal     1
Below Normal     0
Low              1 
Below Normal     1 
Below Normal     0
Below Normal     0

有没有一种简单的方法可以在R.中执行此操作。我相信我可以在R中没有FOR循环的情况下执行此操作。

由于

1 个答案:

答案 0 :(得分:2)

我们可以使用data.table。我们将'data.frame'转换为'data.table'(setDT(df1))。从v1.9.6开始,引入了rleid函数,只要当前值与前一个值不同,就会给出一个新的分组索引。我们将其用作分组索引,并使用reptimes 1复制1和0以及为每个组复制组-1(.N-1)的长度并分配({{ 1}})输出到新列。

:=

或者通过比较'Category'的滞后和超前来给出一个逻辑索引可以更容易地做到这一点,用library(data.table)#v.9.6+ setDT(df1)[, StartTime :=rep(c(1,0), c(1L, .N-1)) , rleid(Category)] 追加,因为长度将比'df1'的nrow少一个并且换行使用TRUE,以便将逻辑索引强制转换为二进制。

+