У меня есть кадр данных, например:
set.seed(567)
year= as.factor(c(rep("1998", 20), rep("1999", 16)))
lepsp= c(letters[seq(from = 1, to = 20 )], c('a','b','c'),letters[seq(from =8, to = 20 )])
freq= rpois(36, lambda=12)
df<-data.frame(year, lepsp, freq)
df<-
df %>%
group_by(year) %>%
mutate(rank = dense_rank(-freq))
Я хотел бы разделить df
на year
и создать новый столбец с именем quant
, который присваивает соответствующий квартиль каждому значению freq
в подмножестве. В новом столбце можно назначить квантиль как probs = seq(0, 1, 0.05)
. Самое главное, что позже я могу назначать категории на основе квантиля, так что, например, все, что ниже 25%, классифицируется как редкое. Таким образом, это могут быть общие обозначения квартилей, но чем меньше приращение процентилей, тем больше «пространства для маневра» у меня будет, чтобы классифицировать что-то как редкое r
или обычное c
.
Вывод должен выглядеть так:
df<-data.frame(df, quant= c(75,50,25,50,50,25,75,50,25,75,75,100,50,100,100,50,25,25,75,25,75,50,50,75,75,25,25,50,50,50,25,75,75,25,75,50),
abucat= c("c", "r", "r","r","r", "r","c","r","r", "c", "c", "c", "r","c", "c","r" , "r", "r", "c", "r", "c","r","r","c","c","r",
"r","r","r","r","r","c","c","r","c","r"))
Я пытался:
library(dplyr)
df<-
df %>%
group_by(year) %>%
mutate(quant = quantile(freq, probs= seq(0, 1, 0.25)))
sub1998
иsub1999
и использовалquantile(sub1998$freq)
иquantile(sub1999$freq)
таким образом, что дляsub1998
, еслиfreq
было меньше 6, это = 25%, меньше 11, но больше 6= 50% меньше 12,25, но больше 11= 75% и так далее. больше 12,25 = 100% - person Danielle   schedule 31.05.2018set.seed()
... я думаю, что проблема в этом. Я отредактирую сообщение, чтобы мой вывод соответствовал исходному df. - person Danielle   schedule 31.05.2018dput
для публикации своего фрейма данных, если у вас возникли проблемы с его созданием с нуля. - person jasbner   schedule 31.05.2018