【发布时间】:2018-09-12 12:00:53
【问题描述】:
我有一个数据框:
Time CardID Data Type
1 2018-01-01 10:44:35 10037479 PowerOn STBEvent
2 2018-01-01 10:44:48 10037479 0401 UseRemote
3 2018-01-01 10:44:53 10037479 0301 UseRemote
4 2018-01-01 10:45:13 10037479 0401 UseRemote
5 2018-01-01 10:45:24 10037479 0301 UseRemote
6 2018-01-01 10:45:30 10037479 1415 LiveView
7 2018-01-01 10:45:37 10037479 0401 UseRemote
8 2018-01-01 11:08:01 10037479 1412 LiveView
9 2018-01-01 11:08:13 10037479 0401 UseRemote
10 2018-01-01 11:14:31 10037479 0301 UseRemote
structure(list(Time = structure(c(1514783675, 1514783688, 1514783693,
1514783713, 1514783724, 1514783730, 1514783737, 1514785081, 1514785093,
1514785471), class = c("POSIXct", "POSIXt")), CardID = c("10037479",
"10037479", "10037479", "10037479", "10037479", "10037479", "10037479",
"10037479", "10037479", "10037479"), Data = c("PowerOn", "0401",
"0301", "0401", "0301", "1415", "0401", "1412", "0401", "0301"
), Type = c("STBEvent", "UseRemote", "UseRemote", "UseRemote",
"UseRemote", "LiveView", "UseRemote", "LiveView", "UseRemote",
"UseRemote")), .Names = c("Time", "CardID", "Data", "Type"), row.names = c(NA,
10L), class = "data.frame")
我正在使用 dplyr 的超前和滞后函数来获取特定行之前和之后的数据点。例如我正在使用这个:
ae1 <- which(dplyr::lag(df$Data)=="1415")+1
这让我从上面的数据框中获得第 6 行,其中 Type 等于“LiveView”。我理解通过更改代码末尾的整数,我可以从数据框中获取相应的行。我的问题是:我可以使用相同/相似的功能,其中我可以获取下一个“LiveView”的数据 - 这是第 8 行。我可以很好地做到
ae1 <- which(dplyr::lag(df$Data)=="1415")+3
获取第 8 行。但是下一个 LiveView 类型可以出现在除 8 之外的任何行中。我在想类似于
ae1 <- which(dplyr::lag(df$Data)=="1415")+nrow(where Type == next "LiveView")
【问题讨论】:
-
您的预期结果有点不清楚。假设您的数据框名为
df,可能类似于group_by(df, Type) %>% mutate(lag1 = lag(Data, 1))。还有lead函数,它朝相反的方向移动。 -
我同意@jdobres。目前尚不清楚您要做什么以及您的预期输出应该是什么样子。您能否编辑您的问题以包含您提供的特定样本数据的预期输出?
-
是的,这一点都不清楚。请用文字说明目标。是获取行号吗?行本身?第一个 LiveWire 行超过第一个 1415 行?
-
“这让我得到第 6 行”——不,8,当我运行代码时。