Как использовать цикл for для индивидуальной фильтрации квантилей многих столбцов - PullRequest
0 голосов
/ 13 марта 2019

У меня есть временной ряд с около 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...