首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有向图形为空白,但xts对象有一个观察。

有向图形为空白,但xts对象有一个观察。
EN

Stack Overflow用户
提问于 2018-09-13 20:01:43
回答 1查看 199关注 0票数 0

问题的闪亮版本(最初的问题):

我正在绘制一个基于xts对象的有向图,该对象是基于两个输入的过滤结果:年龄和语言。

如果我将年龄滑块移动到32的下限和上限,并在输入框中输入“西班牙语”,则图是空的。但是,过滤后的tibble和已过滤的xts对象都显示了1个观察结果。这个观察结果应该出现在情节中,但没有出现。

我觉得我错过了一些非常基本的东西,但我不能把手指放在上面。

代码语言:javascript
复制
---
title: "test"
output: 
  flexdashboard::flex_dashboard:
    theme: bootstrap
runtime: shiny
---

```{r setup, include=FALSE}

图书馆(柔性仪表板)

图书馆(Tidyverse)

图书馆(Tibbletime)

图书馆(有向图)

图书馆(Magrittr)

图书馆(Xts)

图书馆(DT)

代码语言:javascript
复制
```{r global, include=FALSE}

生成数据

set.seed(1)

dat <- data.frame(date = seq(as.Date("2018-01-01") )

代码语言:javascript
复制
                           as.Date("2018-06-30"), 
代码语言:javascript
复制
                           "days"),
代码语言:javascript
复制
                sex = sample(c("male", "female"), 181, replace=TRUE),
代码语言:javascript
复制
                lang = sample(c("english", "spanish"), 181, replace=TRUE),
代码语言:javascript
复制
                age = sample(20:35, 181, replace=TRUE))

dat <- sample_n(dat,80)

代码语言:javascript
复制
Sidebar {.sidebar}
=====================================

```{r}

sliderInput("agerange",标签=“年龄”,

代码语言:javascript
复制
          min = 20, 
代码语言:javascript
复制
          max = 35, 
代码语言:javascript
复制
          value = c(20, 35),
代码语言:javascript
复制
          step=1)

selectizeInput(

‘'foo',标签=空,

选项=c(“英语”、“西班牙语”、“其他”)、

multiple = TRUE

)

代码语言:javascript
复制
Plot
=====================================

```{r}

过滤<-反应性({

req((在%输入$foo中为dat$lang%)\is.null(输入$foo))

dat %>%

代码语言:javascript
复制
mutate(new = 1) %>%
代码语言:javascript
复制
arrange(date) %>%
代码语言:javascript
复制
filter(if(is.null(input$foo)) (new==1) else (lang %in% input$foo)) %>%
代码语言:javascript
复制
filter(age >= input$agerange[1] & age <= input$agerange[2])

})

总数<-反应性({

过滤<- filtered()

过滤%>%

时间序列分析

tibbletime::as_tbl_time(index = date) %>% #转换为tibble对象

代码语言:javascript
复制
select(date, new) %>%
代码语言:javascript
复制
tibbletime::collapse_by("1 week", side = "start", clean = TRUE) %>%
代码语言:javascript
复制
group_by(date) %>%
代码语言:javascript
复制
mutate(total = sum(new, na.rm = TRUE)) %>%
代码语言:javascript
复制
distinct(date, .keep_all = TRUE) %>%
代码语言:javascript
复制
ungroup() %>%
代码语言:javascript
复制
# expand matrix to include weeks without data
代码语言:javascript
复制
complete(
代码语言:javascript
复制
  date = seq(date[1], date[length(date)], by = "1 week"),
代码语言:javascript
复制
  fill = list(total = 0)
代码语言:javascript
复制
)

})

转换为xts

totals_ <-反应性({

代码语言:javascript
复制
totals <- totals()
代码语言:javascript
复制
xts(totals, order.by = totals$date)

})

绘图

renderDygraph({

总数<-总计()

有向图(totals_,“总计”) %>%

代码语言:javascript
复制
dyRangeSelector() %>%
代码语言:javascript
复制
dyOptions(useDataTimezone = FALSE,
代码语言:javascript
复制
          stepPlot = TRUE,
代码语言:javascript
复制
          drawGrid = FALSE,
代码语言:javascript
复制
          fillGraph = TRUE) 

})

代码语言:javascript
复制
Filtered Tibble
=====================================

```{r}

DT::renderDataTable({

代码语言:javascript
复制
filtered <- filtered()
代码语言:javascript
复制
  DT::datatable(filtered, 
代码语言:javascript
复制
                options = list(bPaginate = TRUE))

})

代码语言:javascript
复制
Filtered xts
=====================================

```{r}

DT::renderDataTable({

代码语言:javascript
复制
totals_ <- totals_()
代码语言:javascript
复制
  DT::datatable(totals_[, c("date", "total")], 
代码语言:javascript
复制
                options = list(bPaginate = TRUE))

})

代码语言:javascript
复制

非闪亮版:

为了隔离这个问题,我将我的示例从闪亮(我的实际用例)中移出。

代码语言:javascript
复制
library(tidyverse)
library(tibbletime)
library(dygraphs)
library(magrittr)
library(xts)

set.seed(1)
dat <- data.frame(date = seq(as.Date("2018-01-01"), 
                             as.Date("2018-06-30"), 
                             "days"),
                  sex = sample(c("male", "female"), 181, replace=TRUE),
                  lang = sample(c("english", "spanish"), 181, replace=TRUE),
                  age = sample(20:35, 181, replace=TRUE))
dat <- sample_n(dat, 80)

totals <-
dat %>%
  mutate(new = 1) %>%
  arrange(date) %>%
  filter(lang=="spanish") %>% 
  filter(age>=32 & age<=32) %>%
  {. ->> filtered} %>%
  tibbletime::as_tbl_time(index = date) %>% # convert to tibble time object
  select(date, new) %>%
  tibbletime::collapse_by("1 week", side = "start", clean = TRUE) %>%
  group_by(date) %>%
  mutate(total = sum(new, na.rm = TRUE)) %>%
  distinct(date, .keep_all = TRUE) %>%
  ungroup() %>%
  # expand matrix to include weeks without data
  complete(
    date = seq(date[1], date[length(date)], by = "1 week"),
    fill = list(total = 0))

filtered

#        date  sex    lang age new
#1 2018-01-25 male spanish  32   1

# convert to xts
totals_ <- xts(totals, order.by = totals$date)

totals_

#           date         new total
#2018-01-21 "2018-01-21" "1" "1"  

# plot
dygraph(totals_[, "total"]) %>%
  dyRangeSelector() %>%
  dyOptions(useDataTimezone = FALSE,
            stepPlot = TRUE,
            drawGrid = FALSE,
            fillGraph = TRUE)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-13 21:00:33

我认为最基本的问题是,有向图形不会绘制由1行组成的xts对象。因此,每当通过闪亮的输入设置过滤器(或静态筛选器调用)将数据集减少到1匹配( xts对象中的1行)时,图将为空。

(如果匹配为零,则R在tibbletime步骤的示例中抛出一个错误,因为没有行。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52321011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档