我正在尝试创建一个幻想足球委员会,以跟踪每个NFL球员在即将到来的2019赛季的平均吃水状况(ADP)。我正在通过https://fantasyfootballcalculator.com/调用API。我想在一个Shiny应用程序中构建一些外观类似于其站点上的草稿板的东西,但是我可以自定义它:
它不必看起来像这样漂亮,但我希望按位置对单元格进行颜色编码。如您所见,背景颜色显示每个玩家的位置:蓝色代表RB,绿色代表WR,红色代表QB,等等。
我意识到在R中使用DT,如果它们是数字值,则可以对单元格进行着色,但是,如果它们包含某些字符串值(如“-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应用程序中经常使用的DT,但是我可以接受其他选择。我也了解到,我可能必须构建一个自定义Javascript函数。有什么想法吗?