сверху вниз и случайная выборка по группам в зависимости от условий - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь настроить функцию, имеющуюся в R. Функция (с моими изменениями) выглядит следующим образом:

(благодаря Akrun здесь )

library(purrr)
library(dplyr)
fs <- list(as_mapper(~  top_n(20)), 
       as_mapper(~ row_number() %in% sample(row_number(), 20 )),
       as_mapper(~  top_n(-20)
       )


map2_df(list(1, c(2, 3), 4), fs, ~          

    data %>%        
        filter(totals > 100, score_rank %in% .x) %>%
        filter(.y(score))

         )%>%   bind_rows(data %>%
                            filter(totals <= 100))

Я пытаюсь изменить исходную функцию следующим образом:

Если score_rank = 1, взять 20 нижних наблюдений (на основе столбца score)

Если score_rank = 2 или 3, то взять случайную выборку наблюдений каждой группы

Если score_rank = 4, тогда взять 20 лучших наблюдений (на основе столбца score)

Итак, я хочу изменить часть кода fs, просто добавление top_n() не работает.

Данные:

tickers <- c("GIS", "KR", "MKC", "SJM", "EL", "HRL", "HSY", "K", 
             "KMB", "MDLZ", "MNST", "PEP", "PG", "PM", "SYY", "TAP", "TSN", "WBA", "WMT",
             "MMM", "ABMD", "ACN", "AMD", "AES", "AON", "ANTM", "APA", "CSCO", "CMS", "KO", "GRMN", "GPS",
             "JEC", "SJM", "JPM", "JNPR", "KSU", "KEYS", "KIM", "NBL", "NEM", "NWL", "NFLX", "NEE", "NOC", "TMO", "TXN", "TWTR")

library(tidyquant)
data <- tq_get(tickers,
               get = "stock.prices",              # Collect the stock price data from 2010 - 2015
               from = "2010-01-01",
               to = "2015-01-01") %>%
  group_by(symbol) %>%
  tq_transmute(select = adjusted,                 # Convert the data from daily prices to monthly prices
               mutate_fun = periodReturn,
               period = "monthly",
               type = "arithmetic")

data$score <- runif(nrow(data), min = 0, max = 1)
data$totals <- runif(nrow(data), min = 10, max = 150)

data <- data %>%
  group_by(date) %>%
  mutate(
    score_rank = ntile(score, 4)
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...