R:如果值包含某个字符串,则颜色数据 table 单元格
R: Color data table cell if value contains a certain string
我正在尝试创建一个梦幻足球板,用于跟踪即将到来的 2019 赛季每位 NFL 球员的平均选秀位置 (ADP)。我正在使用对 https://fantasyfootballcalculator.com/ 的 API 的调用。我想在闪亮的应用程序中构建一些东西,看起来类似于他们网站上的草稿板,但我可以在我这边自定义:
它不必看起来像这样漂亮,但我希望单元格按位置编码;如您所见,背景颜色显示每个球员的位置:蓝色代表 RB,绿色代表 WR,红色代表 QB,等等。
我意识到在 R 中使用 DT,我可以为数值单元格着色,但是如果单元格包含某些字符串值,如“-RB”或“-WR”,我可以为单元格着色吗“?我目前在 DT table 中内置了以下代码,它以以下格式显示玩家和位置:"Player Name - Position".
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 函数。有什么想法吗?
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))
我正在尝试创建一个梦幻足球板,用于跟踪即将到来的 2019 赛季每位 NFL 球员的平均选秀位置 (ADP)。我正在使用对 https://fantasyfootballcalculator.com/ 的 API 的调用。我想在闪亮的应用程序中构建一些东西,看起来类似于他们网站上的草稿板,但我可以在我这边自定义:
它不必看起来像这样漂亮,但我希望单元格按位置编码;如您所见,背景颜色显示每个球员的位置:蓝色代表 RB,绿色代表 WR,红色代表 QB,等等。
我意识到在 R 中使用 DT,我可以为数值单元格着色,但是如果单元格包含某些字符串值,如“-RB”或“-WR”,我可以为单元格着色吗“?我目前在 DT table 中内置了以下代码,它以以下格式显示玩家和位置:"Player Name - Position".
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 函数。有什么想法吗?
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))