通过进一步的函数传递 DT::renderDataTable 中的选定行以呈现另一个 table
Passing selected rows in a DT::renderDataTable through further functions to render another another table
第一次张贴者和整个 R 的新手,更不用说闪亮了,所以任何帮助都将不胜感激。
我想从一个数据表中的选定行中获取值,对这些数字执行一些操作(在本例中是找到两个数字的平均值),然后将它们呈现到第二个数据表,现在将有一个新数字,但第一列(在本例中为 'names')保持不变。
我希望下面的 MRE 能说明我正在尝试做的事情。
tab <- data.frame(names = c("shelly","bob","jim","frank","jess"),
numbers = c(30,45,55,70,90),
numbers2 = c(16,34,91,76,83))
tab$numbers<- paste(tab$numbers,tab$numbers2, sep = ',')
tab<-tab[,-3]
library(shiny)
library(DT)
# Define UI ----
ui <- fluidPage(
titlePanel("simpleApp"),
sidebarLayout(
sidebarPanel(),
mainPanel (
dataTableOutput("table"),
dataTableOutput("select_table")
)
)
)
# Define server logic ----
server <- function(input, output) {
output$table <- DT::renderDataTable(tab, selection='multiple')
data3<- reactive({
data.frame(tab[input$table_rows_selected,])})
output$select_table<-DT::renderDataTable({
if(nrow(data3()) > 0) {
transform(data3(), numbers = mean(tab[input$table_rows_selected]$numbers)
#this is the part I'm having trouble with I think
}
})
}
# Run the app ----
shinyApp(ui = ui, server = server)
非常感谢任何帮助,感谢您对我的耐心等待!
干杯
试试这个 -
tab <- data.frame(names = c("shelly","bob","jim","frank","jess"),
numbers = c(30,45,55,70,90))
library(shiny)
library(DT)
# Define UI ----
ui <- fluidPage(
titlePanel("simpleApp"),
sidebarLayout(
sidebarPanel(),
mainPanel (
dataTableOutput("table"),
dataTableOutput("select_table")
)
)
)
# Define server logic ----
server <- function(input, output) {
output$table <- DT::renderDataTable(tab, selection='multiple')
data3<- reactive({
data.frame(tab[input$table_rows_selected,])})
output$select_table<-DT::renderDataTable({
if(nrow(data3()) > 0) {
transform(data3(), numbers = numbers - 12)
}
})
}
# Run the app ----
shinyApp(ui = ui, server = server)
编辑
对于更新问题,您可以将计算更改为 -
output$select_table<-DT::renderDataTable({
if(nrow(data3()) > 0) {
transform(data3(), numbers = sapply(strsplit(tab$numbers[input$table_rows_selected], ','), function(x) sum(as.numeric(x))))
}
})
第一次张贴者和整个 R 的新手,更不用说闪亮了,所以任何帮助都将不胜感激。
我想从一个数据表中的选定行中获取值,对这些数字执行一些操作(在本例中是找到两个数字的平均值),然后将它们呈现到第二个数据表,现在将有一个新数字,但第一列(在本例中为 'names')保持不变。 我希望下面的 MRE 能说明我正在尝试做的事情。
tab <- data.frame(names = c("shelly","bob","jim","frank","jess"),
numbers = c(30,45,55,70,90),
numbers2 = c(16,34,91,76,83))
tab$numbers<- paste(tab$numbers,tab$numbers2, sep = ',')
tab<-tab[,-3]
library(shiny)
library(DT)
# Define UI ----
ui <- fluidPage(
titlePanel("simpleApp"),
sidebarLayout(
sidebarPanel(),
mainPanel (
dataTableOutput("table"),
dataTableOutput("select_table")
)
)
)
# Define server logic ----
server <- function(input, output) {
output$table <- DT::renderDataTable(tab, selection='multiple')
data3<- reactive({
data.frame(tab[input$table_rows_selected,])})
output$select_table<-DT::renderDataTable({
if(nrow(data3()) > 0) {
transform(data3(), numbers = mean(tab[input$table_rows_selected]$numbers)
#this is the part I'm having trouble with I think
}
})
}
# Run the app ----
shinyApp(ui = ui, server = server)
非常感谢任何帮助,感谢您对我的耐心等待! 干杯
试试这个 -
tab <- data.frame(names = c("shelly","bob","jim","frank","jess"),
numbers = c(30,45,55,70,90))
library(shiny)
library(DT)
# Define UI ----
ui <- fluidPage(
titlePanel("simpleApp"),
sidebarLayout(
sidebarPanel(),
mainPanel (
dataTableOutput("table"),
dataTableOutput("select_table")
)
)
)
# Define server logic ----
server <- function(input, output) {
output$table <- DT::renderDataTable(tab, selection='multiple')
data3<- reactive({
data.frame(tab[input$table_rows_selected,])})
output$select_table<-DT::renderDataTable({
if(nrow(data3()) > 0) {
transform(data3(), numbers = numbers - 12)
}
})
}
# Run the app ----
shinyApp(ui = ui, server = server)
编辑
对于更新问题,您可以将计算更改为 -
output$select_table<-DT::renderDataTable({
if(nrow(data3()) > 0) {
transform(data3(), numbers = sapply(strsplit(tab$numbers[input$table_rows_selected], ','), function(x) sum(as.numeric(x))))
}
})