【发布时间】:2019-10-15 13:22:37
【问题描述】:
希望仅为数据表而不是传单数据计算按选定日期范围分组的数值变量的平均值和中位数。传单地图有效(只需缩小以查看假的长/纬度图,但现在不用担心)。
我创建了第二个数据框df10 用于数据表的中位数/平均值总和。
到目前为止,我尝试更改输入函数来为均值创建单独的变量,但发现它很麻烦,而且对于我的需要来说不是必需的。
尝试在此处使用colMeans(dataset()[,which(sapply(dataset(), class) != "Date")]) Shiny calculate the mean of columns in dataframe
错误是"invalid 'x' type in 'x && y"。它与colmeans有关
### Generate a dataset ###
start_date <- as.Date('2018-01-01')
end_date <- as.Date('2019-05-10')
set.seed(1984)
date1 <- as.Date(sample( as.numeric(start_date): as.numeric(end_date), 988,
replace = T), origin = '1970-01-01')
group <- rep(letters[1:26], each = 38)
x1 <- runif(n = 988, min = 3.26, max = 10)
x2 <- runif(n = 988, min = 3.26, max = 10)
x3 <- runif(n = 988, min = 3.26, max = 10)
x4 <- runif(n = 988, min = 3.26, max = 10)
x5 <- runif(n = 988, min = 3.26, max = 10)
latitude <- runif(988,40.75042,50.75042)
longitude <- runif(988,-73.98928,-63.98928)
dataframe <- cbind(data.frame(date1,group,x1,x2,x3,x4,x5,latitude,longitude))
df10 <- cbind(data.frame(date1,group,x1,x2,x3,x4,x5))
library(lubridate)
dataframe$date <- ymd(dataframe$date1)
df10$date <- ymd(df10$date1)
library(shiny)
library(leaflet)
library(DT)
dataframe$defectrateLvl <- cut(dataframe$x1,
c(3.26,6,100), include.lowest = T,
labels = c('3.26-6x','6x+'))
beatCol <- colorFactor(palette = c('yellow', 'red'), dataframe$defectrateLvl)
ui <- fluidPage(
dateInput(inputId = "date", label="Select a date", value = "2019-03-01", min = "2018-01-01", max = "2019-05-10",
format = "yyyy-mm-dd", startview = "month",
language = "en", width = NULL),
leafletOutput("map"),
fluidRow(
dateRangeInput("daterange","Date range:",start=Sys.Date()-10, end=Sys.Date() -1),
DT::dataTableOutput("tbl")
)
)
server <- shinyServer(function (input, output,session) {
dailyData <- reactive(dataframe[dataframe$date == format(input$date, '%Y/%m/%d'), ] )
output$map <- renderLeaflet({
dataframe <- dailyData() # Added this in attempt to integrate
dataframe %>% leaflet() %>%
setView(lng = -73.98928, lat = 40.75042, zoom = 10) %>%
addProviderTiles("CartoDB.Positron", options = providerTileOptions(noWrap = TRUE)) %>%
addCircleMarkers(
lng=~dataframe$longitude, # Longitude coordinates
lat=~dataframe$latitude, # Latitude coordinates
#radius=~defectrateLvl, # Total count
popup =~ dataframe$group,
color = ~beatCol(dataframe$defectrateLvl),
fillOpacity=0.5 # Circle Fill Opacity
)
})
output$tbl<-DT::renderDataTable({
dataset <- reactive({df10 })
dataset() %>% group_by(group) %>%
filter(date > input$daterange[1],
date < input$daterange[2])
#sapply(Filter(is.numeric, df6), mean)
colMeans(dataset()[,which(sapply(dataset(), class) !="date","date1","group")])
})
})
shinyApp(ui, server)
我希望将数值变量按均值进行汇总,如果可能的话按中位数进行汇总,但目前这不太重要。任何帮助将不胜感激。
【问题讨论】:
-
请修正您的代码,其中有多个错误。括号错误,缺少数据集(例如 df7)
-
您的代码仍然无法正常工作。缺少逗号和括号...
-
@DSGym 我更新了代码。感谢您指出这一点。
-
谢谢,现在可以了。解决方案对您有帮助吗?
-
@DSGym 是的。谢谢!只是好奇我是否可以以同样的方式使用
result2 <- data.frame(colMedians(df[which(sapply(df, class)=="numeric")]))进程?我试过了,但没有用。
标签: r shiny dt reactive shiny-reactivity