使用 Shiny Inputs 在数据集中创建新变量
Using Shiny Inputs to create new variables in the dataset
假设我们有一个小的 nfl 球员数据集:
Team POS WT
1 Chiefs K 175
2 Bills K 225
3 Browns CB 175
4 Chargers DT 300
5 Browns TE 220
6 Texans LB 262
7 Cowboys LB 234
8 Patriots DT 309
9 Titans K 218
10 Browns WR 167
我想创建一个闪亮的页面,让人们将自己的权重 (WT) 放入其中,并在数据集中创建每个 nfl 球员的权重与输入权重之间的差异。
到目前为止....不。
ui.R
shinyUI(fluidPage(
titlePanel(h1("Which NFL Player Are You Most Like?", align = "center")),
sidebarLayout(
sidebarPanel(
selectInput("team", "Choose a Team:",
choices = c("All","49ers","Bears","Bengals", "Bills",
"Broncos","Browns","Buccaneers", "Cardinals",
"Charges","Cheifs","Colts", "Cowboys",
"Dolphins","Eagles","Falcons", "Giants",
"Jaguars","Jets","Lions", "Packers",
"Panthers","Patriots","Raiders", "Rams",
"Ravens","Redskins","Saints", "Seahawks",
"Steelers","Texans","Titans", "Vikings")),
selectInput("Position", "What is your Football Position?:",
choices = c("All","C", "CB", "DE", "DT", "FB", "G", "K", "LB", "LS", "NT", "P", "QB", "RB",
"S", "T", "TE", "WR")),
numericInput("Weight", "How Much Do You Weigh? (LBS):", NA)
),
mainPanel(
p("Use the panel at the right to input your own information. Below will be the name or names of players you are most like. If you only want to use
a subset of variables, leave the others blank or set to 'All'."),
#Right now I just want to know that it worked, so show me the updated dataset where there is the Weight_diff column
tableOutput("view")
)
)
))
server.R
library(shiny)
NFLdat<-structure(list(Team = structure(c(10L, 4L, 6L, 9L, 6L, 30L, 12L,
22L, 31L, 6L), .Label = c("49ers", "Bears", "Bengals", "Bills",
"Broncos", "Browns", "Buccaneers", "Cardinals", "Chargers", "Chiefs",
"Colts", "Cowboys", "Dolphins", "Eagles", "Falcons", "Giants",
"Jaguars", "Jets", "Lions", "Packers", "Panthers", "Patriots",
"Raiders", "Rams", "Ravens", "Redskins", "Saints", "Seahawks",
"Steelers", "Texans", "Titans", "Vikings"), class = "factor"),
POS = structure(c(7L, 7L, 2L, 4L, 16L, 8L, 8L, 4L, 7L, 17L
), .Label = c("C", "CB", "DE", "DT", "FB", "G", "K", "LB",
"LS", "NT", "P", "QB", "RB", "S", "T", "TE", "WR"), class = "factor"),
WT = c(175L, 225L, 175L, 300L, 220L, 262L, 234L, 309L, 218L,
167L)), .Names = c("Team", "POS", "WT"), row.names = c(NA,
10L), class = "data.frame")
shinyServer(function(input, output) {
observe({
if(is.na(input$Weight)) NFLdat$Weight_diff<-abs(data$WT-data$WT)
else NFLdat$Weight_diff<-abs(data$WT-((as.numeric(input$Weight))))
})
#Or alternatively
inputWT <- reactive({
input$Weight
})
NFLdat$Weight_diff2<-abs(data$WT-inputWT)
output$view <- renderTable({
NFLdat
})
output$new <-inputWT
})
谢谢!!!
您可能想要创建一个反应式表达式,returns 一个 NFLdat
子集准备好呈现。我猜你的 shinyServer 应该是这样的:
shinyServer(function(input, output) {
NFLdat.2show <- reactive({
#browser()
if (is.na(input$Weight)) return()
bmask.team <- if (input$team!='All') NFLdat$Team==input$team else TRUE
d <- NFLdat[bmask.team,]
d$Weight_diff <- abs(d$WT-input$Weight)
d
})
output$view <- renderTable({
NFLdat.2show()
})
})
假设我们有一个小的 nfl 球员数据集:
Team POS WT
1 Chiefs K 175
2 Bills K 225
3 Browns CB 175
4 Chargers DT 300
5 Browns TE 220
6 Texans LB 262
7 Cowboys LB 234
8 Patriots DT 309
9 Titans K 218
10 Browns WR 167
我想创建一个闪亮的页面,让人们将自己的权重 (WT) 放入其中,并在数据集中创建每个 nfl 球员的权重与输入权重之间的差异。
到目前为止....不。
ui.R
shinyUI(fluidPage(
titlePanel(h1("Which NFL Player Are You Most Like?", align = "center")),
sidebarLayout(
sidebarPanel(
selectInput("team", "Choose a Team:",
choices = c("All","49ers","Bears","Bengals", "Bills",
"Broncos","Browns","Buccaneers", "Cardinals",
"Charges","Cheifs","Colts", "Cowboys",
"Dolphins","Eagles","Falcons", "Giants",
"Jaguars","Jets","Lions", "Packers",
"Panthers","Patriots","Raiders", "Rams",
"Ravens","Redskins","Saints", "Seahawks",
"Steelers","Texans","Titans", "Vikings")),
selectInput("Position", "What is your Football Position?:",
choices = c("All","C", "CB", "DE", "DT", "FB", "G", "K", "LB", "LS", "NT", "P", "QB", "RB",
"S", "T", "TE", "WR")),
numericInput("Weight", "How Much Do You Weigh? (LBS):", NA)
),
mainPanel(
p("Use the panel at the right to input your own information. Below will be the name or names of players you are most like. If you only want to use
a subset of variables, leave the others blank or set to 'All'."),
#Right now I just want to know that it worked, so show me the updated dataset where there is the Weight_diff column
tableOutput("view")
)
)
))
server.R
library(shiny)
NFLdat<-structure(list(Team = structure(c(10L, 4L, 6L, 9L, 6L, 30L, 12L,
22L, 31L, 6L), .Label = c("49ers", "Bears", "Bengals", "Bills",
"Broncos", "Browns", "Buccaneers", "Cardinals", "Chargers", "Chiefs",
"Colts", "Cowboys", "Dolphins", "Eagles", "Falcons", "Giants",
"Jaguars", "Jets", "Lions", "Packers", "Panthers", "Patriots",
"Raiders", "Rams", "Ravens", "Redskins", "Saints", "Seahawks",
"Steelers", "Texans", "Titans", "Vikings"), class = "factor"),
POS = structure(c(7L, 7L, 2L, 4L, 16L, 8L, 8L, 4L, 7L, 17L
), .Label = c("C", "CB", "DE", "DT", "FB", "G", "K", "LB",
"LS", "NT", "P", "QB", "RB", "S", "T", "TE", "WR"), class = "factor"),
WT = c(175L, 225L, 175L, 300L, 220L, 262L, 234L, 309L, 218L,
167L)), .Names = c("Team", "POS", "WT"), row.names = c(NA,
10L), class = "data.frame")
shinyServer(function(input, output) {
observe({
if(is.na(input$Weight)) NFLdat$Weight_diff<-abs(data$WT-data$WT)
else NFLdat$Weight_diff<-abs(data$WT-((as.numeric(input$Weight))))
})
#Or alternatively
inputWT <- reactive({
input$Weight
})
NFLdat$Weight_diff2<-abs(data$WT-inputWT)
output$view <- renderTable({
NFLdat
})
output$new <-inputWT
})
谢谢!!!
您可能想要创建一个反应式表达式,returns 一个 NFLdat
子集准备好呈现。我猜你的 shinyServer 应该是这样的:
shinyServer(function(input, output) {
NFLdat.2show <- reactive({
#browser()
if (is.na(input$Weight)) return()
bmask.team <- if (input$team!='All') NFLdat$Team==input$team else TRUE
d <- NFLdat[bmask.team,]
d$Weight_diff <- abs(d$WT-input$Weight)
d
})
output$view <- renderTable({
NFLdat.2show()
})
})