如何在R数据帧中创建具有递增序列号的新列,以使其基于其他列值递增

时间:2017-12-14 18:35:04

标签: r dataframe dplyr

这就是我简化的数据框架 -

App       IsNewSession
Word         TRUE   
Excel        FALSE   
Chrome       TRUE  
Notepad      FALSE  
Chrome       FALSE  
Notepad      FALSE  
Excel        TRUE  
Chrome       FALSE

我需要创建一个名为SessionNumber的新列。每次IsNewSession = TRUE,会话编号应该是前一行的会话编号+ 1.否则,它只保留与前一行相同的会话编号。

所需数据框 -

App     IsNewSession   SessionNumber
Word     TRUE            1
Excel    FALSE           1
Chrome   TRUE            2
Notepad  FALSE           2
Chrome   FALSE           2 
Notepad  FALSE           2
Excel    TRUE            3
Chrome   FALSE           3

我可以使用for循环执行此操作,但我的数据帧非常大(250K行)并且需要很长时间。

我尝试使用像这样的mutate,但这也不起作用。 df $ SessionNumber = 1

library(dplyr)

df <- df %>% 
  mutate(SessionNumber = ifelse(IsNewSession, lag(SessionNumber) + 1, lag(SessionNumber)))

在R中执行此操作的高效方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果第一个值为FALSE,则评论中的问题不起作用。

df$SessionNumber <- cumsum(df$IsNewSession) + as.numeric(!df$SessionNumber[1])