我有一些事件,我需要为每个试验的2秒间隔分组,我不确定如何做到这一点。
event<- c('tr_start', 'mag', 'lev', 'lev', 'lev', 'mag',
'tr_start', 'mag','mag', 'lev', 'lev', 'lev', 'mag', 'mag')
time<- c(6, 7, 8.5, 10.2, 11, 14, 14.5, 15.1, 16, 16.2, 17, 17.7, 18, 18.1)
trial<- c(rep(1, 6), rep(2,8))
df<- cbind(event, time, trial)时间以秒为单位。预期的输出将是一个新的列'value‘,其中包含每种类型('mag’或'lev')的事件数之和,并且每个试验的开始时间由事件'tr_start‘定义。
这是试验1的期望输出:试验开始于6s (由'tr_start‘事件设置)。这意味着在试验2之前有3个2秒的间隔(6-8,8-10,10-12)。输出应该只计算在每个2秒的整数中出现的'mag‘和'lev’的数量。
event<- c('mag', 'lever', 'mag', 'lever', 'mag', 'lever')
trial<- c(rep(1, 6))
value<- c(1, 1, 0, 1, 1, 1)
df_summarry<- cbind(event, trial, value) 谢谢!
发布于 2019-08-21 00:06:32
可能是这样的:
df <- as.data.frame(df)
df$time <- as.numeric(levels(df$time))[df$time]
tapply(seq_len(nrow(df)), df$trial, function(x) {
tt <- (df$time[x[-1]] - df$time[x[1]]) %/% 2 * 2
tt <- factor(tt, levels=seq(0,max(tt),2))
tt <- t(table(df$event[x[-1]], tt)[1:2,])
data.frame(tStart = df$time[x[1]]+as.numeric(rownames(tt)), tEnd = 2+df$time[x[1]]+as.numeric(rownames(tt)), lev=tt[,1], mag=tt[,2])
})
#$`1`
# tStart tEnd lev mag
#0 6 8 0 1
#2 8 10 1 0
#4 10 12 2 0
#6 12 14 0 0
#8 14 16 0 1
#
#$`2`
# tStart tEnd lev mag
#0 14.5 16.5 1 2
#2 16.5 18.5 2 2https://stackoverflow.com/questions/57577383
复制相似问题