在 R 中总结具有条件的时间序列列
Summarising time series columns with condition in R
我 运行 遇到了这个时间序列数据集可能 aggregate/summarise 的问题。
下面是一个数据集,其中包含来自 Internet 聊天系统的聊天的独特实例。
chatId agentId beginning_timestamp ending_timestamp answer
1 22 4/07/2016 9:00 4/07/2016 9:30 1
2 22 4/07/2016 9:26 4/07/2016 9:35 5
3 22 4/07/2016 9:15 4/07/2016 9:19 5
4 10 4/07/2016 11:17 4/07/2016 12:13 2
5 10 4/07/2016 11:29 4/07/2016 11:50 1
- 唯一的id字段是chatId。
- agentId 是接收此聊天的唯一代理人
- beginning_timestamp是聊天开始的时间
- ending_timestamp是聊天结束的时间
- answer 是一个连续变量,用于后面的分析
我想使用 dplyr(或其他任何工具)以这种方式总结以下数据集:
- 对于每个组(agentId 和 chatId),找出在同一时间范围内是否有另一个聊天(从 beginning_timestamp 加 5 分钟到 ending_timestamp - 5 分钟)
- 如果有聊天,请写出这个独特的聊天是在另一个聊天正在进行时发生的。
这是一个结果数据集,其中包含我想要的附加列(multiple_chats = 一个离散变量即可):
chatId agentId beginning_timestamp ending_timestamp answer multiple_chats
1 22 4/07/2016 9:00 4/07/2016 9:30 1 1
2 22 4/07/2016 9:26 4/07/2016 9:35 5 0
3 22 4/07/2016 9:15 4/07/2016 9:19 5 1
4 10 4/07/2016 11:17 4/07/2016 12:13 2 1
5 10 4/07/2016 11:29 4/07/2016 11:50 1 1
如有任何答案,我们将不胜感激。
看起来你的一些重叠可能与你在 "resulting dataset" 中显示的不同,但这里有一些来自
的输入
df <- data.frame(chatID = 1:5, agentID = c(22,22,22,10,10),
beginning_timestamp = c('4/07/2016 9:00', '4/07/2016 9:26', '4/07/2016 9:15', '4/07/2016 11:17', '4/07/2016 11:29'),
ending_timestamp = c('4/07/2016 9:30', '4/07/2016 9:35', '4/07/2016 9:19', '4/07/2016 12:13', '4/07/2016 11:50'),
answer = c(1,5,5,2,1))
l
ibrary(tidyverse)
library(lubridate)
df %>%
mutate(beginning_timestamp = mdy_hm(beginning_timestamp),
ending_timestamp = mdy_hm(ending_timestamp),
int = interval(beginning_timestamp + minutes(5),
ending_timestamp - minutes(5))) -> df
df$multiple_chats = unlist(tapply(df$int, df$agentID,
function(x) as.numeric(rowSums(outer(x, x, int_overlaps))>1)))
我 运行 遇到了这个时间序列数据集可能 aggregate/summarise 的问题。
下面是一个数据集,其中包含来自 Internet 聊天系统的聊天的独特实例。
chatId agentId beginning_timestamp ending_timestamp answer
1 22 4/07/2016 9:00 4/07/2016 9:30 1
2 22 4/07/2016 9:26 4/07/2016 9:35 5
3 22 4/07/2016 9:15 4/07/2016 9:19 5
4 10 4/07/2016 11:17 4/07/2016 12:13 2
5 10 4/07/2016 11:29 4/07/2016 11:50 1
- 唯一的id字段是chatId。
- agentId 是接收此聊天的唯一代理人
- beginning_timestamp是聊天开始的时间
- ending_timestamp是聊天结束的时间
- answer 是一个连续变量,用于后面的分析
我想使用 dplyr(或其他任何工具)以这种方式总结以下数据集:
- 对于每个组(agentId 和 chatId),找出在同一时间范围内是否有另一个聊天(从 beginning_timestamp 加 5 分钟到 ending_timestamp - 5 分钟)
- 如果有聊天,请写出这个独特的聊天是在另一个聊天正在进行时发生的。
这是一个结果数据集,其中包含我想要的附加列(multiple_chats = 一个离散变量即可):
chatId agentId beginning_timestamp ending_timestamp answer multiple_chats
1 22 4/07/2016 9:00 4/07/2016 9:30 1 1
2 22 4/07/2016 9:26 4/07/2016 9:35 5 0
3 22 4/07/2016 9:15 4/07/2016 9:19 5 1
4 10 4/07/2016 11:17 4/07/2016 12:13 2 1
5 10 4/07/2016 11:29 4/07/2016 11:50 1 1
如有任何答案,我们将不胜感激。
看起来你的一些重叠可能与你在 "resulting dataset" 中显示的不同,但这里有一些来自
df <- data.frame(chatID = 1:5, agentID = c(22,22,22,10,10),
beginning_timestamp = c('4/07/2016 9:00', '4/07/2016 9:26', '4/07/2016 9:15', '4/07/2016 11:17', '4/07/2016 11:29'),
ending_timestamp = c('4/07/2016 9:30', '4/07/2016 9:35', '4/07/2016 9:19', '4/07/2016 12:13', '4/07/2016 11:50'),
answer = c(1,5,5,2,1))
l
ibrary(tidyverse)
library(lubridate)
df %>%
mutate(beginning_timestamp = mdy_hm(beginning_timestamp),
ending_timestamp = mdy_hm(ending_timestamp),
int = interval(beginning_timestamp + minutes(5),
ending_timestamp - minutes(5))) -> df
df$multiple_chats = unlist(tapply(df$int, df$agentID,
function(x) as.numeric(rowSums(outer(x, x, int_overlaps))>1)))