Вот ответ в простой старой R.
#make up some data
df <- data.frame(rt = rnorm(60), id = rep(letters[1:3], rep(20)) )
#and this is all there is to it
df <- df[order(df$id, df$rt),]
df$bin <- rep( unlist( tapply( df$rt, df$id, quantile )), each = 4)
Обратите внимание, что для использования команды quantile
можно использовать любые квантили. Значения по умолчанию для квинтилей, но если вы хотите децили, используйте
quantile(x, seq(0, 1, 0.1))
в функции выше.
Ответ выше немного хрупок. Требуется равное количество RT / ID, и я не сказал вам, как добраться до магического числа 4. Но он также будет очень быстро работать с большим набором данных. Если вы хотите более надежное решение в базе R.
library('Hmisc')
df <- df[order(df$id),]
df$bin <- unlist(lapply( unique(df$id), function(x) cut2(df$rt[df$id==x], g = 5) ))
Это намного надежнее, чем первое решение, но не так быстро. Для небольших наборов данных вы не заметите.