Saya belajar membuat dasbor menggunakan Shiny dan memiliki masalah berikut, berharap seseorang menjelaskan kepada saya apa yang saya lakukan salah di sini. Pertama, saya ingin melihat semua nilai yang tersedia untuk 'Rambut' dan 'Spesies' ketika saya mengklik bilah pencarian. Saya berpikir pemfilteran akan berhasil, tetapi tidak berhasil. Saya juga mencoba dengan choices = hair sebagai argumen selectInput tambahan tetapi tidak berhasil juga.

library(shiny)
library(dplyr)
library(DT)

?starwars


# Step 1 - prepare row data
starwars_data = as_tibble(starwars_data)

# a) add missing info
starwars_data = starwars %>%
  mutate(
    ID = rownames(starwars),
    height = case_when(
      name == 'Finn' ~ as.integer(178),
      name == 'Rey' ~ as.integer(170),
      name == 'Poe Dameron' ~ as.integer(172),
      name == 'BB8' ~ as.integer(67),
      name == 'Captain Phasma' ~ as.integer(200),
      TRUE ~ height
    ),
    mass = case_when(
      name == 'Finn' ~ 73,
      name == 'Rey' ~ 54,
      name == 'Poe Dameron' ~ 80,
      name == 'BB8' ~ 18,
      name == 'Captain Phasma' ~ 76,
      TRUE ~ mass
    ),
    film_counter = lengths(films),
    vehicle_counter = lengths(vehicles),
    starship_counter = lengths(starships)
  )


# 2) Prepare layout

hair = starwars_data %>% 
  select(hair_color) %>% 
  distinct() %>%
  `$`('hair')


spec = starwars_data %>% 
  select(species) %>% 
  distinct() %>% 
  `$`('spec')


ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      selectInput('hair', 'Hair', hair),
      selectInput('spec', 'Species', spec)
    ),
    mainPanel(
      #plotlyOutput('plot'),
      #dataTableOutput('table'))
    )
  )
)


srv <- function(input, output){

  d = reactive({starwars_data %>%
      filter(hair_color %in% input$hair)})

  c = reactive({starwars_data %>%
      filter(species %in% input$spec)})

  #output$table = renderDataTable({datatable(d)})

}

shinyApp(ui, srv)

Terima kasih atas bantuan apa pun dalam memahami ini.

0
krakowi 20 November 2017, 16:36

1 menjawab

Jawaban Terbaik

Ubah kode Anda di sini:

hair = starwars_data %>% 
  select(hair_color) %>% 
  distinct() 

Kode yang Diperbarui jika Anda ingin tabel ditampilkan sehubungan dengan hair:

   library(shiny)
library(dplyr)
library(DT)
library(tibble)

?starwars


# Step 1 - prepare row data
starwars_data = as_tibble(starwars_data)

# a) add missing info
starwars_data = starwars %>%
  mutate(
    ID = rownames(starwars),
    height = case_when(
      name == 'Finn' ~ as.integer(178),
      name == 'Rey' ~ as.integer(170),
      name == 'Poe Dameron' ~ as.integer(172),
      name == 'BB8' ~ as.integer(67),
      name == 'Captain Phasma' ~ as.integer(200),
      TRUE ~ height
    ),
    mass = case_when(
      name == 'Finn' ~ 73,
      name == 'Rey' ~ 54,
      name == 'Poe Dameron' ~ 80,
      name == 'BB8' ~ 18,
      name == 'Captain Phasma' ~ 76,
      TRUE ~ mass
    ),
    film_counter = lengths(films),
    vehicle_counter = lengths(vehicles),
    starship_counter = lengths(starships)
  )


# 2) Prepare layout

hair = starwars_data %>% 
  select(hair_color) %>% 
  distinct() 


spec = starwars_data %>% 
  select(species) %>% 
  distinct() 


ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      selectInput('hair', 'Hair', hair),
      selectInput('spec', 'Species', spec)
    ),
    mainPanel(
      #plotlyOutput('plot'),
      dataTableOutput('table'))
    )
  )
)


srv <- function(input, output){

  d = reactive({starwars_data %>%
      filter(hair_color %in% input$hair)})

  c = reactive({starwars_data %>%
      filter(species %in% input$spec)})

  output$table = renderDataTable({datatable(d())})

}

shinyApp(ui, srv)
0
amrrs 20 November 2017, 13:47