Я пытаюсь найти быстрый способ сделать следующее:Сравните переменный с его годовыми значениями квартили и создать rankorder переменной
- Определить годовые значения квартили базы данных
- Сравнить (матч) конкретного переменная в базе данных ее годовой стоимости квартиль
- в зависимости от значения, создать новую переменную со значением 0,1,2,3 ... (rankorder)
Вот воспроизводимый пример
library(data.table)
dt <- data.table(rep(seq.int(2000,2010,1),30), runif(330,0,5))
colnames(dt) <- c("year","response") # Ignore warning
quarts <- function(x) {
quantile(x, probs = seq(0.25,0.75,0.25),na.rm=T, names=T)
}
setkey(dt, year)
a <- data.table(dt[,quarts(response), by = key(dt)])
Теперь data.table a
содержит необходимые значения квартиль dt$response
за каждый год. Что мне нужно сделать сейчас, чтобы сравнить значение dt$response
со значениями квартили в a
и создать новую переменная dt$quartresponse
, которая принимает
- Значение 0, если
dt$response[i]
меньше значений 0,25 квартили для этого конкретного года
- значение 1, если
dt$response[i]
находится между значением 0,25 и 0,5 квартили для этого конкретного года - значение 2, если
dt$response[i]
находится между значением 0,50 и 0,75 квартили для этого конкретного года - Value 3 в противном случае
Я уверен, что какой-то цикл будет работать, но должен быть более R-образный способ решения этого.
Любые предложения приветствуются!
Simon
Я честно не понимаю, почему люди дают минус очки на вопросы вообще и особенно не в том случае, когда есть воспроизводимый пример! Любые объяснения будут приветствоваться ... – SJDS
В новой версии devel (о которой я забыл упомянуть) достаточно просто «dcast». Вы можете установить версию devel из https://github.com/Rdatatable/data.table/wiki/Installation – akrun