Самый простой способ - использовать mapply
.Скажите df
- это ваш фрейм данных.Затем вы можете сделать:
df$Pctile <- mapply(function(row,x) ecdf(df[row,-1])(x), 1:nrow(df), df[,1])
Примечание: ecdf(z)
берет вектор z
чисел и выдает "эмпирическую функцию кумулятивного распределения" для z
, поэтому, когда вы делаете ecdf(z)(x)
, вы получаетеквантиль, где x
попадает в это эмпирическое распределение.И mapply(fn, a, b)
(в данном случае) принимает функцию fn
двух скалярных аргументов и выдает вектор результатов
[ fn( a[1], b[1] ), ..., fn( a[n], b[n] ) ]