Good use of cut and ddply are correct, but here's some vanilla R chicken scratch that will do what you need.
# Generate example data
EasyScaled <- data.frame(
Trial = paste0(c(sapply(1:3, function(x) rep(x, 9))), "_easy.wav"),
TrialTime = c(sapply(seq_len(9)-1, function(x) (floor(x/3))*5000 + x%%3 + 3000)),
PupilBaseCorrect = rnorm(27, 0.78, 0.1)
)
# group means of PupilBaseCorrect by Trial + filename
tmp <- tapply(EasyScaled$PupilBaseCorrect,
paste0(EasyScaled$Trial, ',',
as.integer((EasyScaled$TrialTime - 3000)/5000)+1), mean)
# melt & recast the array manually into a dataframe
EasyTimeBin <- do.call(data.frame,
append(list(row.names = NULL,
Trial = gsub('.wav,.*','',names(tmp)[3*seq_len(length(tmp)/3)])),
structure(lapply(seq_len(3),
function(x) tmp[3*(seq_len(length(tmp)/3)-1) + x]
), .Names = paste0("TimeBin", seq_len(3))
)
)
)
print(EasyTimeBin)
# Trial TimeBin1 TimeBin2 TimeBin3
# 1 1_easy 0.7471973 0.7850524 0.8939581
# 2 2_easy 0.8096973 0.8390587 0.7757359
# 3 3_easy 0.8151430 0.7855042 0.8081268