r - 使用 dplyr 中的超前和滞后来获取向量内的差分值

标签 r dplyr lag lead

我有一个数据框

structure(list(Time = structure(c(1531056854, 1531057121, 1517382101, 
1517386850, 1517386951, 1517399987, 1517400523, 1517400523), class = c("POSIXct", 
"POSIXt")), Data = c("Start", "Exit", "Start", "Start", "Exit", 
"Start", "Exit", "Exit"), same = c(0, 0, 1, 0, 0, 0, 1, NA)), class = "data.frame", .Names = c("Time", 
"Data", "same"), row.names = c(NA, -8L))

第 2 列的理想情况是先有一个开始,然后是退出

但是,在某些情况下,我可以有一个 Start`StartExit 或一个 Start 后跟 Exit` `退出。我试图通过这段代码来识别后续的启动和退出:

library(dplyr)
df <- df %>% mutate(same = ifelse(Data == lead(Data), 1, 0))

这为我提供了以下输出:

                  Time  Data same
1 2018-07-08 19:04:14 Start    0
2 2018-07-08 19:08:41  Exit    0
3 2018-01-31 12:31:41 Start    1
4 2018-01-31 13:50:50 Start    0
5 2018-01-31 13:52:31  Exit    0
6 2018-01-31 17:29:47 Start    0
7 2018-01-31 17:38:43  Exit    1
8 2018-01-31 17:38:43  Exit   NA

我正在尝试弄清楚如果序列中有两个 Start 以及 第二个 Start,如何识别>first Exit 如果序列中存在两个标记为 1 的 Exit。所需的输出如下:

                  Time  Data same
1 2018-07-08 19:04:14 Start    0
2 2018-07-08 19:08:41  Exit    0
3 2018-01-31 12:31:41 Start    0
4 2018-01-31 13:50:50 Start    1 #this should be one
5 2018-01-31 13:52:31  Exit    0
6 2018-01-31 17:29:47 Start    0
7 2018-01-31 17:38:43  Exit    1 #this should be one
8 2018-01-31 17:38:43  Exit    0

我尝试在 ifelse 中使用 if 条件,但它变得困惑。

最佳答案

library(tidyverse)
df %>% 
  mutate( same2 = ifelse( Data == "Start" & lag( Data ) == Data, 1, 0 )) %>%
  mutate( same2 = ifelse( Data == "Exit" & lead( Data ) == Data, 1, same2 ) )

#                  Time  Data same same2
# 1 2018-07-08 15:34:14 Start    0    NA
# 2 2018-07-08 15:38:41  Exit    0     0
# 3 2018-01-31 08:01:41 Start    1     0
# 4 2018-01-31 09:20:50 Start    0     1
# 5 2018-01-31 09:22:31  Exit    0     0
# 6 2018-01-31 12:59:47 Start    0     0
# 7 2018-01-31 13:08:43  Exit    1     1
# 8 2018-01-31 13:08:43  Exit   NA    NA

关于r - 使用 dplyr 中的超前和滞后来获取向量内的差分值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52093162/

相关文章:

r - 错误: package 'lsei' is not installed for 'arch=x64'

R:有光泽的dateRangeInput格式

sql-server - RODBC 将 float 作为 SQL Server 中的字符

r - 如何按组计数并查找是否至少有一个观察值符合标准?

css - 我们可以将 textInputAddon 中的插件放在 R shiny 的右侧吗?

r - dplyr 在匿名函数中执行多个绘图

r - 在 dplyr 的 mutate 中使用 switch 语句

R plm lag - 什么相当于 Stata 中的 L1.x?

Oracle lag 函数,它可以接受列别名吗?

r - 使用条件创建滞后变量并按 id 分组