R: Ячейка таблицы данных цвета, если значение содержит определенную строку - PullRequest
1 голос
/ 11 июня 2019

Я пытаюсь создать доску для фэнтези-футбола, которая отслеживает среднюю осадную позицию (ADP) каждого игрока НФЛ на предстоящий сезон 2019 года. Я использую вызов API на https://fantasyfootballcalculator.com/. Я хотел бы создать что-то в приложении Shiny, которое будет похоже на черновую доску на их сайте, но я могу настроить на своем конце:

enter image description here

Это не должно выглядеть так же красиво, как это, но я хочу, чтобы ячейки раскрашивались по позиции; Как видно, цвета фона показывают, какую позицию играет каждый игрок: синий для RB, зеленый для WR, красный для QB и т. д.

Я понимаю, что используя DT в R, я могу закрасить ячейки, если они числовые значения, , но могу ли я покрасить ячейки, если они содержат определенные строковые значения, такие как "- RB" или "- WR" ? В настоящее время у меня есть следующий код, встроенный в таблицу DT, который отображает игрока и позицию в следующем формате: «Имя игрока - Позиция».

library(RJSONIO)
library(RCurl)
library(dplyr)
library(DT)

half_ppr_players = RJSONIO::fromJSON(getURL("https://fantasyfootballcalculator.com/api/v1/adp/half-ppr?teams=12&year=2019"))

half_ppr_df = do.call(rbind.data.frame, half_ppr_players$players)

rownames(half_ppr_df) <- seq(length=nrow(half_ppr_df))

keepers = c()

half_ppr_df = half_ppr_df %>%
  filter(!(name %in% keepers)) 

half_ppr_df = half_ppr_df %>%
  mutate(name = as.character(name),
         adp_rank = 1:nrow(half_ppr_df),
         rd = floor(adp_rank/12),
         pick = ifelse(adp_rank %% 12 == 0, 12, adp_rank %% 12),
         rd = ifelse(pick == 12, rd, rd + 1))

m = matrix(nrow = 17, ncol = 12)
for (row in 1:17) {
  for (col in 1:12) {
    this_row = half_ppr_df[half_ppr_df$rd == row & half_ppr_df$pick == col,]
    if(row %% 2 == 0) {
      m[row, 12-col+1] = paste(this_row$name, '-', this_row$position)
    } else {
      m[row, col] = paste(this_row$name, '-', this_row$position)
    }
  }
}

draftboard = as.data.frame(m)
colnames(draftboard) = paste("Pick", seq(1, ncol(m), 1))
rownames(draftboard) = paste("Rd", seq(1, nrow(m), 1))
DT::datatable(draftboard)

В настоящее время я использую DT, потому что это то, что я привык использовать в приложениях Shiny, но я открыт для других вариантов. Я также понимаю, что мне, возможно, придется создать пользовательскую функцию Javascript. Есть идеи?

1 Ответ

1 голос
/ 11 июня 2019
dat <- data.frame(
  V1 = c("John - RB", "Max - WR"),
  V2 = c("Bill - WR", "David - RB")
)

js <- "(/- WR/).test(value) ? 'red' : (/- RB/).test(value) ? 'yellow' : ''"

datatable(dat) %>% 
  formatStyle(1:ncol(dat), backgroundColor = JS(js))

enter image description here

...