График плотности логических значений - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть фрейм данных с двумя переменными.Первая переменная это даты.Вторая переменная является логической и определяет, является ли какое-либо утверждение истинным или ложным для этого дня (например, «В тот день, когда шел дождь»).

Я бы хотел построить эти данные так, чтобы кривая больше или меньшеменьше от 1 (для ИСТИНЫ) до 0 (для ЛОЖИ), в зависимости от плотности значений ЛОЖЬ за промежуток времени.То есть, чем больше FALSE значений близко друг к другу, тем глубже провал.Вроде как это:

sketch giving an example of the outcome I want to achieve


Пример данных:

dat <- read.table(textConnection("
Var1 Var2 
2019-01-01 TRUE
2019-01-02 TRUE
2019-01-03 TRUE
2019-01-04 TRUE
2019-01-05 TRUE
2019-01-06 TRUE
2019-01-07 TRUE
2019-01-08 TRUE
2019-01-09 FALSE
2019-01-10 TRUE
2019-01-11 TRUE
2019-01-12 TRUE
2019-01-13 TRUE
2019-01-14 TRUE
2019-01-15 TRUE
2019-01-16 TRUE
2019-01-17 FALSE
2019-01-18 TRUE
2019-01-19 FALSE
2019-01-20 TRUE
2019-01-21 FALSE
2019-01-22 TRUE
2019-01-23 TRUE
2019-01-24 TRUE
2019-01-25 TRUE
2019-01-26 TRUE
2019-01-27 TRUE
2019-01-28 TRUE
2019-01-29 TRUE
2019-01-30 TRUE
2019-01-31 TRUE
2019-02-01 TRUE
2019-02-02 FALSE
2019-02-03 TRUE
2019-02-04 FALSE
2019-02-05 FALSE
2019-02-06 FALSE
2019-02-07 TRUE
2019-02-08 FALSE
2019-02-09 FALSE
2019-02-10 TRUE
2019-02-11 TRUE
2019-02-12 TRUE
2019-02-13 TRUE
2019-02-14 TRUE
2019-02-15 TRUE
2019-02-16 FALSE
2019-02-17 FALSE
2019-02-18 FALSE
2019-02-19 FALSE
2019-02-20 TRUE
2019-02-21 FALSE
2019-02-22 TRUE
2019-02-23 FALSE
2019-02-24 FALSE
2019-02-25 TRUE
2019-02-26 TRUE
2019-02-27 FALSE
2019-02-28 TRUE
2019-03-01 TRUE
"), header = TRUE, colClasses=c("Date", "logical"))
plot(dat)

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Не уверен, что именно вы ищете, но вот идея:

library(ggplot2)

ggplot(data = aggregate(Var2 ~ Var1, dat, FUN = mean), aes(x = Var1, y = Var2)) + 
  geom_smooth(se = FALSE, method = "loess") +
  geom_point(data = dat, aes(x = Var1, y = as.integer(Var2)), shape=1)

enter image description here

0 голосов
/ 11 февраля 2019

Вы можете вычислить скользящее среднее после преобразования логики в числовое значение (функция ma скопирована из здесь ) с помощью ggplot:

library(dplyr)
library(ggplot2)

ma <- function(x,n=5){stats::filter(x,rep(1/n,n), sides=2)}

dat %>%
  mutate(
    Var3 = as.numeric(Var2),
    ma = ma(Var3, n = 6)
  ) %>%
  ggplot(aes(x = Var1, y = ma)) +
  geom_line() +
  geom_point(aes(y = Var3)) +
  ylim(0, 1)

. Вы сможете найтиулучшенная формула скользящего среднего для продольных данных.

enter image description here

...