Как быстро сформировать группы (квартили, децили и т. д.) ), упорядочивая столбцы во фрейме данных

Я вижу много вопросов и ответов по порядку и сортировке . Есть ли что-нибудь, что сортирует векторы или фреймы данных по группам (например, квартили или децили)? У меня есть «ручное» решение, но, вероятно, есть лучшее решение, которое было протестировано группой.

Вот моя попытка:

temp <- data.frame(name=letters[1:12], value=rnorm(12), quartile=rep(NA, 12))
temp
#    name       value quartile
# 1     a  2.55118169       NA
# 2     b  0.79755259       NA
# 3     c  0.16918905       NA
# 4     d  1.73359245       NA
# 5     e  0.41027113       NA
# 6     f  0.73012966       NA
# 7     g -1.35901658       NA
# 8     h -0.80591167       NA
# 9     i  0.48966739       NA
# 10    j  0.88856758       NA
# 11    k  0.05146856       NA
# 12    l -0.12310229       NA
temp.sorted <- temp[order(temp$value), ]
temp.sorted$quartile <- rep(1:4, each=12/4)
temp <- temp.sorted[order(as.numeric(rownames(temp.sorted))), ]
temp
#    name       value quartile
# 1     a  2.55118169        4
# 2     b  0.79755259        3
# 3     c  0.16918905        2
# 4     d  1.73359245        4
# 5     e  0.41027113        2
# 6     f  0.73012966        3
# 7     g -1.35901658        1
# 8     h -0.80591167        1
# 9     i  0.48966739        3
# 10    j  0.88856758        4
# 11    k  0.05146856        2
# 12    l -0.12310229        1

Есть ли лучший подход (более чистый / быстрый / однострочный)? Спасибо!

62
задан Machavity 26 January 2019 в 03:09
поделиться