我有两列的数据集:一列是事件类型,另一列是时间。
我想首先根据每次出现的事件'tr_start'创建一个列'trial_number'。从第一次出现“ tr_start”到第二次出现“ trial_number”应等于1。从第二次到第三次应为2,依此类推。
其次,我只想选择试用开始后的10秒钟('tr_start')。
time<- c(92, 96, 97, 100, 103, 104, 106, 111, 112, 115, 118, 119, 123)
event<- c('tr_start', 'on', 'off', 'on', 'off','on', 'off',
'left','on', 'off', 'tr_start', 'left', 'left')
data<- data.frame(time, event)
在此示例中,“ trial_number”列的第1至10行应为1,而第11至13行应为2。 其次,第一个“ tr_start”发生在第二个(时间)92。对于每个tr_start,我只需要保留在接下来的10s内进行的试验。在这种情况下,仅行1至4(最多102秒)和行11至13(每个'tr_start'之后的10s)。
谢谢!
答案 0 :(得分:1)
我们可以使用cumsum
data$group <- cumsum(data$event == 'tr_start')
然后我们可以基于“组”进行子集
subset(data, group ==1 & time <= (time[1] + 10))
# time event group
#1 92 tr_start 1
#2 96 on 1
#3 97 off 1
#4 100 on 1
如果需要为每个“组”完成
library(dplyr)
data %>%
group_by(group = cumsum(event == "tr_start")) %>%
filter(time <= (first(time) + 10))
# A tibble: 7 x 3
# Groups: group [2]
# time event group
# <dbl> <fct> <int>
#1 92 tr_start 1
#2 96 on 1
#3 97 off 1
#4 100 on 1
#5 118 tr_start 2
#6 119 left 2
#7 123 left 2