R блестит, чтобы найти режим одного атрибута из набора данных, - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь создать панель инструментов с R shiny, я хочу создать 2 поля значений, показывающих месяц и час, включая наибольшее количество записей, месяц и час являются атрибутами в наборе данных, набор данных называется преступлением , Мне нужно найти определенные c коды для реализации моей функции

total.records <- sum(crimes$OCCURENCE_ON_DATE)

total.records.hour{need to be implemented }

  output$value2 <- renderValueBox({

valueBox(
  formatC(total.records.hour, format="d", big.mark=',')
  ,'The hour including most records'
  ,icon = icon("gbp",lib='glyphicon')
  ,color = "navy")

})

Здесь я приношу фрагмент кода и не знаю, что делать Далее, мой набор данных - это отчет о преступлениях в Бостоне.

1 Ответ

0 голосов
/ 08 мая 2020

Случайные данные. Вы сказали, что «месяц и час являются атрибутами в наборе данных» , поэтому я сначала сгенерирую случайные данные за один год, а затем я возьму это POSIXt время для создания двух столбцов $month и $hour. (Это будут строки, но это не имеет значения.) После того, как они созданы, нам больше не нужно или использовать $when.

set.seed(42)
crimes0 <- data.frame(when = as.POSIXct('2020-01-01 00:00:00', tz="UTC") + runif(100000, min = 0, max = 365*24*3600))
head(crimes0)
#                  when
# 1 2020-11-29 21:42:03
# 2 2020-12-08 00:46:50
# 3 2020-04-14 10:34:56
# 4 2020-10-30 02:43:16
# 5 2020-08-22 05:41:26
# 6 2020-07-08 11:16:49
range(crimes0$when)
# [1] "2020-01-01 00:04:19 UTC" "2020-12-30 23:56:02 UTC"

crimes0 <- within(crimes0, {
  month = format(when, format = "%b")
  hour  = format(when, format = "%H")
})
head(crimes0)
#                  when hour month
# 1 2020-11-29 21:42:03   21   Nov
# 2 2020-12-08 00:46:50   00   Dec
# 3 2020-04-14 10:34:56   10   Apr
# 4 2020-10-30 02:43:16   02   Oct
# 5 2020-08-22 05:41:26   05   Aug
# 6 2020-07-08 11:16:49   11   Jul

Поиск наиболее частых вхождений.

sort(table(crimes0$month), decreasing = TRUE)
#  Jul  May  Jan  Oct  Mar  Dec  Aug  Nov  Sep  Jun  Feb  Apr 
# 8623 8543 8539 8456 8429 8346 8319 8294 8242 8193 8073 7943 

sort(table(crimes0$hour), decreasing = TRUE)
#   01   23   14   05   07   09   03   06   00   15   21   10   02   16   11   18   13   12   17   19   20   22   04   08 
# 4264 4246 4239 4237 4231 4227 4217 4214 4207 4193 4193 4189 4171 4171 4147 4124 4107 4102 4100 4093 4092 4082 4080 4074 

А теперь адаптируйте это к чему-нибудь, что может работать в блестящем приложении. Я предполагаю, что либо (а) сами данные являются реактивными, либо (б) существует другая фильтрация данных, так что ваши подсчеты равны реактивным и будут меняться. Например, если пользователю предоставляется выбор фильтрации типов преступлений для детализации, тогда два поля значений будут отображать наиболее частый месяц / час для этого типа.

library(shiny)
library(shinydashboard)

# if this is shiny, then the data is or should be something reactive ...
# I'll assume that 'crimes' is reactive data
crimes_rx <- reactive({
  # ...
  crimes0
})
crimes_freq <- reactive({
  dat <- req(crimes_rx())
  list(
    month = sort(table(dat$month), decreasing = TRUE),
    hour = sort(table(dat$hour), decreasing = TRUE)
  )
})
output$value1 <- renderValueBox({
  req(crimes_freq())
  valueBox(
    names(crimes_freq()$month)[1]
    ,'The month including most records'
    ,icon = icon("gbp",lib='glyphicon')
    ,color = "navy")
})
output$value2 <- renderValueBox({
  req(crimes_freq())
  valueBox(
    names(crimes_freq()$hour)[1]
    ,'The hour including most records'
    ,icon = icon("gbp",lib='glyphicon')
    ,color = "navy")
})

Для вашего собственного блестящее приложение, убедитесь, что это crimes_rx - это данные, которые вы хотите обобщить в полях значений. (Если вы используете данные stati c, просто используйте crimes_rx <- reactive({ crimes }) или удалите его и замените все ссылки dat$ на crimes$ в crimes_freq.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...