У меня есть временной ряд с около 100 датами, 50 объектами на дату (таким образом, 5000 строк) и 50 столбцами (все это разные переменные).Как я могу отфильтровать каждый столбец во фрейме данных по уникальной дате, чтобы сохранить верхние 1/3 значений для каждого столбца на каждую дату.Затем получите средний доход для этой группы на эту дату.Я хочу, чтобы "High" подмножество для каждого столбца, а затем средняя доходность этого "High" подмножества для этой даты.Спасибо.
Мои данные организованы следующим образом, но числа в каждом столбце случайны и различаются, как в столбце «а» (это пример, реальные данные имеют гораздо больше столбцов и много строк)):
Date Return a b c d e f... ...z
2/1/19 5 75 43 67 85 72 56 92
2/1/19 4 27 43 67 85 72 56 92
2/1/19 7 88 43 67 85 72 56 92
2/1/19 2 55 43 67 85 72 56 92
2/2/19 7 69 43 67 85 72 56 92
2/2/19 8 23 43 67 85 72 56 92
2/3/19 2 34 43 67 85 72 56 92
2/3/19 3 56 43 67 85 72 56 92
2/3/19 4 62 43 67 85 72 56 92
2/3/19 4 43 43 67 85 72 56 92
2/3/19 4 26 43 67 85 72 56 92
2/4/19 6 67 43 67 85 72 56 92
2/4/19 1 78 43 67 85 72 56 92
2/5/19 4 75 43 67 85 72 56 92
2/7/19 5 99 43 67 85 72 56 92
2/7/19 4 72 43 67 85 72 56 92
2/7/19 4 45 43 67 85 72 56 92
Я пытаюсь отфильтровать данные в квантили.У меня есть код, который работает для фильтрации в квантилях за одну меру.Однако я хочу отфильтровать результаты по многим показателям индивидуально (т. Е. Мне нужна «высокая» группа для тонны столбцов).
У меня есть код, который работает для одной меры, следующим образом.
Столбцы - это дата, идентичность, а aa - индикатор, по которому я хочу отсортировать
High = df %>%
group_by(df.date) %>%
filter(a > quantile(a, .666)) %>%
summarise(high_return = sum(df.return) / length(df.identity)
Теперь я хочу повторить это, когда у меня есть много индикаторов для сортировки по отдельности (т.е. я не хочу сортироватьдруг в друге, я хочу, чтобы каждый сортировался отдельно, а результаты разбивались по индикаторам)
Я хочу, чтобы вывод цикла представлял собой новый фрейм данных следующего формата (где a_Return - среднее возвращениеверхние 1/3 оригинальных a на данную дату):
Date a_Return b_Return c_Return
2/1/19 6. 7 3
2/3/19 4. 2 5
2/4/19 2. 4 6
Я пробовал приведенный ниже код, но он не работает:
Indicators <- c(“a”, “b”, “c”)
for(i in 1:length(Indicators)){
High = df %>%
group_by(df.date) %>%
filter(High[[I]] > quantile(High[[i]], .666)) %>%
summarise(g = sum(df.return) / length(df.identity)}
При этой попытке я получаю ошибку: "Ошибка в filter_impl (.data, quo): Результат должен иметь длину 20, а не 4719.
Я также пытался:
High %>%
group_by(date) %>%
filter_at(vars(Indicators[i]), any_vars(. > quantile (., .666)))%>%
summarise(!!Indicators[I] := sum(Return) / n())
, но с этим кодом я получаю ошибку" Строкидолжен совпадать с именами столбцов.Неизвестные столбцы: NA "
Я хочу, чтобы High поднялся со столбцом даты, а затем столбцом для каждого a, b и c.