按组检查因素变化

时间:2019-11-27 15:13:03

标签: r data.table

我有一个data.table如下:

library(data.table)
DT <- fread(
"Event_Type  country year   
A   NLD   2005
B   NLD   2004       
A   GBR   2006
B   GBR   2003   
A   GRC   2002             
A   GRC   2007",
header = TRUE)

this post,我知道可以看到事件类型是否发生如下变化:

ind <- with(DT, c(FALSE, Event_Type  [-1L]!= Event_Type  [-length(Event_Type  )]) & Event_Type  !='NULL')
DT$switch <- ifelse(ind, 1, '')

但是我也希望能够按组进行操作,在这种情况下为country。我该怎么办?

1 个答案:

答案 0 :(得分:2)

如果您使用的是data.table,则可以使用shift函数创建一个滞后变量,并检查event是否等于其滞后值。

DT[, switch := Event_Type != shift(Event_Type, fill = Event_Type[1]), country]

这将创建代码的ind部分,如果您需要除TRUE / FALSE之外的其他内容,则可以将其放入ifelse(如果您使用的是最新版本,则可以将其放在fifelse中) data.table版本)。