У меня есть фрейм данных с 10 000 наблюдений, и я хотел бы иметь новый столбец с соответствующим децилем для каждой строки.Распределение децилей должно быть сгруппировано по годам.Каков наилучший способ сделать это?
year value quartile 1 2000 2.55118169 NA 2 2000 0.79755259 NA 3 2000 0.16918905 NA 4 2001 1.73359245 NA 5 2001 0.41027113 NA 6 2001 0.73012966 NA 7 2002 -1.35901658 NA 8 2002 -0.80591167 NA 9 2002 0.48966739 NA 10 2003 0.88856758 NA 11 2003 0.05146856 NA 12 2003 -0.12310229 NA
Функция ave дает результат оценки функции путем группировки факторов (в данном случае лет).функция dplyr::ntile здесь полезна для получения децилей.
ave
dplyr::ntile
mydata$decile <- ave(mydata$value, mydata$year, FUN=function(x) { dplyr::ntile(x, 10) } )
Примерно так, используя dplyr, можно получить то, что вы хотите.Предполагая, что в фактическом mydata.
dplyr
mydata
library(dplyr) mydata <- mydata %>% group_by(year) %>% mutate(decile = ntile(value, 10)) %>% ungroup()