Я пытаюсь создать доску для фэнтези-футбола, которая отслеживает среднюю осадную позицию (ADP) каждого игрока НФЛ на предстоящий сезон 2019 года. Я использую вызов API на https://fantasyfootballcalculator.com/. Я хотел бы создать что-то в приложении Shiny, которое будет похоже на черновую доску на их сайте, но я могу настроить на своем конце:
![enter image description here](https://i.stack.imgur.com/FHDGG.png)
Это не должно выглядеть так же красиво, как это, но я хочу, чтобы ячейки раскрашивались по позиции; Как видно, цвета фона показывают, какую позицию играет каждый игрок: синий для 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. Есть идеи?