R:如何从左到右查看两个数据表,以及如何突出显示不同的值
我正在开发一个R闪亮的应用程序,有两个数据框,emp.data_a和emp.data_B,我可以通过从下拉选项中选择一个来访问。除此之外,我希望在一个视图中看到左侧(emp.data_a)和右侧(emp.data_B)方向的两个数据帧 在emp.data_B中,我还希望突出显示与两个数据帧不同的值(示例列Salary) 我的代码:R:如何从左到右查看两个数据表,以及如何突出显示不同的值,r,shiny,R,Shiny,我正在开发一个R闪亮的应用程序,有两个数据框,emp.data_a和emp.data_B,我可以通过从下拉选项中选择一个来访问。除此之外,我希望在一个视图中看到左侧(emp.data_a)和右侧(emp.data_B)方向的两个数据帧 在emp.data_B中,我还希望突出显示与两个数据帧不同的值(示例列Salary) 我的代码: library(shiny) emp.data_A <- data.frame( emp_id = c(1:5), emp_name = c(&quo
library(shiny)
emp.data_A <- data.frame(
emp_id = c(1:5),
emp_name = c("Rick","Dan","Michelle","Ryan","Gary"),
salary = c(623.3,515.2,611.0,735.0,844.25))
emp.data_A
emp.data_B <- data.frame(
emp_id = c(1:5),
emp_name = c("Rick","Dan","Michelle","Ryan","Gary"),
salary = c(623.3,515.2,611.0,729.0,843.25))
emp.data_B
shinyApp(
ui = tagList(
navbarPage(
selectInput("dataset5", "Choose a dataset:",
choices = c("SelectDataSet ", "emp.data_A", "emp.data_B")),
# Button
downloadButton("downloadData5", "Download")
),
mainPanel(
tableOutput("table5")
)
),
server = function(input, output,session) {
datasetInput <- reactive({
switch(input$dataset5,
"emp.data_A" = emp.data_A,
"emp.data_B" = emp.data_B)
})
output$table5 <- renderTable({
datasetInput()
})
}
)
shinyApp(ui, server)
库(闪亮)
emp.data\u A这里是一个使用gt
的工作演示
首先,要并排设置两列,可以在fluidRow
中设置列宽。我在selectInput
中添加了“两者”作为选项,如果选中,将显示两个表。否则,将仅显示所选的表A或表B。有许多替代方法可以使用Shining来布局ui
。如果您还没有阅读,我建议您重新阅读
第二,要包含不同的高亮显示,可以考虑使用<代码> DT/<代码>或<代码> GT包。使用
DT
可以将rowCallback
与javascript一起使用,并添加一个函数来确定要高亮显示的单元格。使用下面的gt
示例,您可以使用tab_样式
高亮显示表格中的单元格
在本例中,我使用创建了一个简单的矩阵,指示两个数据帧之间差异的行和列。然后,在这个矩阵中循环,我为每个行/列组合添加了重复的tab\u样式
,并设置为黄色。请注意,仅当选择“两者”时,第二个表格显示突出显示的差异。但是,您可以更改此设置以满足您的需要
library(shiny)
library(gt)
shinyApp(
ui = fluidPage(
fluidRow(
selectInput("dataset5",
"Choose a dataset:",
choices = c("SelectDataSet", "both", "emp.data_A", "emp.data_B")),
downloadButton("downloadData5", "Download")
),
hr(),
fluidRow(
column(width = 6, gt_output("table1")),
column(width = 6, gt_output("table2"))
)
),
server = function(input, output,session) {
datasetInput1 <- reactive({
if (input$dataset5 == "both" || input$dataset5 == "emp.data_A") {
emp.data_A
} else if (input$dataset5 == "emp.data_B") {
emp.data_B
}
})
datasetInput2 <- reactive({
if (input$dataset5 == "both") {
tbl_diffs <- which(emp.data_A != emp.data_B, arr.ind = TRUE)
tbl_gt_B <- emp.data_B %>%
gt()
for (i in seq_len(nrow(tbl_diffs))) {
tbl_gt_B <- tbl_gt_B %>%
tab_style(
style = list(
cell_fill(color = "#FFFF00")
),
locations = cells_body(
columns = tbl_diffs[[i, "col"]],
rows = tbl_diffs[[i, "row"]]
)
)
}
tbl_gt_B
}
})
output$table1 <- render_gt(
datasetInput1()
)
output$table2 <- render_gt(
datasetInput2()
)
}
)
库(闪亮)
图书馆(gt)
shinyApp(
ui=fluidPage(
fluidRow(
选择输入(“数据集5”,
“选择数据集:”,
choices=c(“SelectDataSet”、“两者”、“emp.data\u A”、“emp.data\u B”),
下载按钮(“下载数据5”,“下载”)
),
hr(),
fluidRow(
列(宽度=6,gt_输出(“表1”),
列(宽度=6,gt_输出(“表2”))
)
),
服务器=功能(输入、输出、会话){
datasetInput1这里是一个使用gt
的工作演示
首先,要并排设置两列,可以在fluidRow
中设置列宽作为selectInput
的一个选项,如果选中,将显示两个表。否则,将仅显示所选的表A或表B。有许多替代方法可以使用shiny来布局ui
。如果您尚未查看,我建议您查看
第二,包含不同的高亮显示,你可以考虑使用<代码> DT 或<代码> GT包。使用<代码> DT < /代码>,可以使用JavaScript使用<代码> ROLLACKBACK/<代码>,并添加一个函数来确定要突出显示的单元格。下面使用<代码> GT示例,可以使用<代码> TabyStase<代码>来突出显示单元格中的单元格。你的桌子
在本例中,我使用创建了一个简单的矩阵,指示两个数据帧之间的行和列的差异。然后,通过该矩阵,我添加了选项卡样式
,对每一行/列组合重复,并设置为黄色。注意,只有在“两者”时选择,第二个表显示突出显示的差异。但是,您可以更改此选项以满足您的需要
library(shiny)
library(gt)
shinyApp(
ui = fluidPage(
fluidRow(
selectInput("dataset5",
"Choose a dataset:",
choices = c("SelectDataSet", "both", "emp.data_A", "emp.data_B")),
downloadButton("downloadData5", "Download")
),
hr(),
fluidRow(
column(width = 6, gt_output("table1")),
column(width = 6, gt_output("table2"))
)
),
server = function(input, output,session) {
datasetInput1 <- reactive({
if (input$dataset5 == "both" || input$dataset5 == "emp.data_A") {
emp.data_A
} else if (input$dataset5 == "emp.data_B") {
emp.data_B
}
})
datasetInput2 <- reactive({
if (input$dataset5 == "both") {
tbl_diffs <- which(emp.data_A != emp.data_B, arr.ind = TRUE)
tbl_gt_B <- emp.data_B %>%
gt()
for (i in seq_len(nrow(tbl_diffs))) {
tbl_gt_B <- tbl_gt_B %>%
tab_style(
style = list(
cell_fill(color = "#FFFF00")
),
locations = cells_body(
columns = tbl_diffs[[i, "col"]],
rows = tbl_diffs[[i, "row"]]
)
)
}
tbl_gt_B
}
})
output$table1 <- render_gt(
datasetInput1()
)
output$table2 <- render_gt(
datasetInput2()
)
}
)
库(闪亮)
图书馆(gt)
shinyApp(
ui=fluidPage(
fluidRow(
选择输入(“数据集5”,
“选择数据集:”,
choices=c(“SelectDataSet”、“两者”、“emp.data\u A”、“emp.data\u B”),
下载按钮(“下载数据5”,“下载”)
),
hr(),
fluidRow(
列(宽度=6,gt_输出(“表1”),
列(宽度=6,gt_输出(“表2”))
)
),
服务器=功能(输入、输出、会话){
datasetInput1您是否可以更清楚地了解您希望Shiny显示的内容?您是否可以给出预期的输出?要更清楚:我想有一个选择,在单个视图中从左到右显示两个数据帧..可能吗?您所说的“突出显示两个数据帧不同的值”是什么意思?emp.data_a和emp.data_B的Salary列中的数字存在差异,我希望强调这一点。我已经编辑了代码,请检查您是否可以更清楚地了解您希望Shiny显示的内容?您是否可以给出预期的输出?更清楚地说:我想有一个选择来显示左侧和右侧的数据帧n单个视图..可能吗?您所说的“突出显示与两个数据帧不同的值”是什么意思?emp.data_a和emp.data_B的工资列中的数字存在差异,我希望突出显示。我已编辑代码,请检查