Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何计算事件总持续时间的运行时间?_R_Dplyr - Fatal编程技术网

R 如何计算事件总持续时间的运行时间?

R 如何计算事件总持续时间的运行时间?,r,dplyr,R,Dplyr,我收集了一个数据框架,用于模拟小组问题解决会话中事件的持续时间,在该会话中,成员进行交流(话语代码)并构建模型(建模代码)。发生的每一分钟都记录在Time\u Processed列中。从技术上讲,这些事件同时发生。我想知道学生们构建每种模型的时间,即该模型的总持续时间或模型更改之前经过的时间 我有以下数据集: 看起来像这样: `Modeling Code` `Discourse Code` Time_Processed <fct> <fct>

我收集了一个数据框架,用于模拟小组问题解决会话中事件的持续时间,在该会话中,成员进行交流(
话语代码
)并构建模型(
建模代码
)。发生的每一分钟都记录在
Time\u Processed
列中。从技术上讲,这些事件同时发生。我想知道学生们构建每种模型的时间,即该模型的总持续时间或模型更改之前经过的时间

我有以下数据集:

看起来像这样:

 `Modeling Code` `Discourse Code` Time_Processed
   <fct>           <fct>                     <dbl>
 1 OFF             OFF                        10.0
 2 MA              Q                          11.0
 3 MA              AG                         16.0
 4 V               S                          18.0
 5 V               Q                          20.0
 6 MA              C                          21.0
 7 MA              C                          23.0
 8 MA              C                          25.0
 9 V               J                          26.0
10 P               S                          28.0

# My explicit dataframe. 
df <- structure(list(`Modeling Code` = structure(c(3L, 2L, 2L, 6L, 
6L, 2L, 2L, 2L, 6L, 4L), .Label = c("A", "MA", "OFF", "P", "SM", 
"V"), class = "factor"), `Discourse Code` = structure(c(7L, 8L, 
1L, 9L, 8L, 2L, 2L, 2L, 6L, 9L), .Label = c("AG", "C", "D", "DA", 
"G", "J", "OFF", "Q", "S"), class = "factor"), Time_Processed = c(10, 
11, 16, 18, 20, 21, 23, 25, 26, 28)), row.names = c(NA, -10L), .Names = c("Modeling Code", 
"Discourse Code", "Time_Processed"), class = c("tbl_df", "tbl", 
"data.frame"))
该模型的条形图如下所示:

如何构建这些建模方法的总持续时间

知道组合的持续时间也很好 这样,在这个小子集中唯一可见的组合恰好是建模代码“MA”与话语代码“C”的配对,这发生在26-21=5分钟


多谢各位

更新的解决方案

df %>% 
  mutate(dur = lead(Time_Processed) - Time_Processed) %>% 
  replace_na(list(dur = 0)) %>% 
  group_by(`Modeling Code`) %>% 
  summarise(tot_time = sum(dur))
(^感谢)

以前的解决方案
这里有一个解决方案创建了一个新变量,
mcode\u grp
,它跟踪相同的
建模代码的离散分组。它不是特别漂亮-它需要在
df
中的每一行上循环-但它可以工作

首先,重命名列以便于参考:

df <- df %>%
  rename(m_code = `Modeling Code`,
         d_code = `Discourse Code`)
接下来,我们需要一种方法来跟踪我们何时找到一个给定
m_code
值的新批。一种方法是为每个
m_code
保留一个计数器,并在到达新批次时递增它。然后,我们可以将该
m_code
批处理的所有行标记为属于同一时间窗口

mcode_ct <- df %>% 
  group_by(m_code) %>% 
  summarise(ct = 0) %>%
  mutate(m_code = as.character(m_code))
最后,
m\u code
mcode\u grp
分组,计算每个批次的持续时间,然后求和
m\u code

 df %>%
   group_by(m_code, mcode_grp) %>%
   summarise(start_time = min(Time_Processed),
             end_time = max(lead_time_proc)) %>%
   mutate(total_time = end_time - start_time) %>%
   group_by(m_code) %>%
   summarise(total_time = sum(total_time)) %>%
   replace_na(list(total_time=0))
输出:

# A tibble: 4 x 2
  m_code total_time
  <fct>       <dbl>
1 MA            12.
2 OFF            1.
3 P              0.
4 V              5.
#一个tible:4 x 2
m_代码总时间
1马12。
2比1。
下午3点。
4对5。

对于任何
dplyr
/
tidyverse
专家,我很想知道如何在不使用循环和计数器的情况下完成更多这方面的技巧

你需要努力澄清这个过程。如果答案只是“建模代码”的列表,那么它看起来很简单,但你有一个“话语”变量,它在这方面的作用没有得到很好的解释。好吧,这是一个列表,但我想知道如何计算这些分类变量的总经过时间。如果我能弄清楚如何做到这一点,那么我也可以将其应用于话语变量。我只是想知道他们在解决问题的过程中出现的频率。哇,这真是令人印象深刻!
mc <- ""
for (i in 1:nrow(df)) {
  current_mc <- df$m_code[i]
  if (current_mc != mc) {
    mc <- current_mc
    mcode_ct <- mcode_ct %>% mutate(ct = ifelse(m_code == mc, ct + 1, ct))
    current_grp <- mcode_ct %>% filter(m_code == mc) %>% select(ct) %>% pull()
  }
  df <- df %>% mutate(mcode_grp = ifelse(row_n == i, current_grp, mcode_grp))
}
 df %>%
   group_by(m_code, mcode_grp) %>%
   summarise(start_time = min(Time_Processed),
             end_time = max(lead_time_proc)) %>%
   mutate(total_time = end_time - start_time) %>%
   group_by(m_code) %>%
   summarise(total_time = sum(total_time)) %>%
   replace_na(list(total_time=0))
# A tibble: 4 x 2
  m_code total_time
  <fct>       <dbl>
1 MA            12.
2 OFF            1.
3 P              0.
4 V              5.