我正在使用与此类似的数据框:
df1 <- data.frame(p1 = c("John", "John", "John", "John", "John", "John", "Jim", "Jim", "Jim", "Jim", "Jim", "Jim", "Jim","Jim" ),
elapsed_time = c(0, 4, 6, 9, 12, 14, 17, 22, 27, 35, 42, 47, 51, 57),
event_type = c("start of period", "play", "play", "play", "play", "play", "play", "play", "play", "timeout", "play", "play", "play", "play"))
Run Code Online (Sandbox Code Playgroud)
看起来像这样:
p1 elapsed_time event_type
1 John 0 start of period
2 John 4 play
3 John 6 play
4 John 9 play
5 John 12 play
6 John 14 play
7 Jim 17 play
8 Jim 22 play
9 Jim 27 play
10 Jim 35 timeout
11 Jim 42 play
12 Jim 47 play
13 Jim 51 play
14 Jim 57 play
Run Code Online (Sandbox Code Playgroud)
我想做的是添加第四列,用于计算自发生三件事之一以来经过的时间:1)event_type ==“周期开始”2)eventtype ==“超时”3)p1已更改(如行中所示) 7 从约翰到吉姆)。这三件事中的任何一个都应该将第四列重置为零。
我想要的输出是
p1 elapsed_time event_type elapsed_time_since_last_break
1 John 0 start of period 0
2 John 4 play 4
3 John 6 play 6
4 John 9 play 9
5 John 12 play 12
6 John 14 play 14
7 Jim 17 play 0
8 Jim 22 play 5
9 Jim 27 play 10
10 Jim 35 timeout 0
11 Jim 42 play 7
12 Jim 47 play 12
13 Jim 51 play 16
14 Jim 57 play 22
Run Code Online (Sandbox Code Playgroud)
我对 r 有点陌生,还没有取得太大的成功。我确信可能有一个我忽略的简单解决方案。
df1 %>%\n group_by(p1, elps = cumsum(event_type != 'play'))%>%\n mutate(elps = elapsed_time - elapsed_time[1])\n\n# A tibble: 14 \xc3\x97 4\n# Groups: p1, elps [13]\n p1 elapsed_time event_type elps\n <chr> <dbl> <chr> <dbl>\n 1 John 0 start of period 0\n 2 John 4 play 4\n 3 John 6 play 6\n 4 John 9 play 9\n 5 John 12 play 12\n 6 John 14 play 14\n 7 Jim 17 play 0\n 8 Jim 22 play 5\n 9 Jim 27 play 10\n10 Jim 35 timeout 0\n11 Jim 42 play 7\n12 Jim 47 play 12\n13 Jim 51 play 16\n14 Jim 57 play 22\nRun Code Online (Sandbox Code Playgroud)\n