Как более простое производное записывается в R группой (в R, ggplot, dplyr, tidyverse)? - PullRequest
1 голос
/ 20 сентября 2019

У меня есть два данных в одном столбце по их названию по оси Y и по дате / времени по оси X.

Я пытаюсь вычислить числовую производную для каждых двух данных, но я не понимаю, производную в R. (Я ищу stats::D или diff, но это не работает).

f (x) = (t_n-t_n-1) / (date_time_n / date_time_n -1)

, где f (x) будет моим столбцом calc.

, то есть, чтобы заменить мой calc=t/10 в приведенном ниже коде функцией, выполняющей это.(Я бы предпочел tidyverse / dplyr)

Ссылки

Ниже: изображение ggplot calc=t/10, где calc будет заменено навыведем.

enter image description here

library(tidyverse)
library(ggplot2)

datas<-data.frame(
  t = c(
    50 + c(0, cumsum(runif(9, -7, 7))),
    70 + c(0, cumsum(runif(9, -10, 10)))
  ),
  orig=c(rep("s1",10),rep("s2",10)),
  date_heure = rep(
    seq(from=as.POSIXct("2012-1-1 0:00", tz="UTC"),by="hour", length=10) ,
    2
  ) 
)


datas<- (datas 
         %>% mutate (
           calc=t/10
         )
)


(
  ggplot(datas) 
  +   geom_line(mapping=aes(x = date_heure, y = t, color=orig, linetype = "s1"))
  +   geom_line(mapping=aes(x = date_heure, y = calc, color=orig, linetype = "s2"))
  +   scale_y_continuous(name = "t", sec.axis = sec_axis(trans=~(range(datas$calc)), name = "calc"))
  +   geom_point(mapping = aes(x = date_heure, y = calc, color=orig), shape = 21, fill = "white")
  +   scale_color_manual(name = "calc", values=c("red", "blue"))
  +   scale_linetype_manual(name = "orig", values = c('solid', 'solid'), 
                            guide = guide_legend(override.aes = list(colour=c("red", "blue"))))

)

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Как я понял, вы хотите, чтобы calc вычислялось с использованием текущих и предыдущих значений t и date_heure.Чтобы получить значение предыдущей строки в определенном столбце, вы можете использовать lag следующим образом:

datas<- (datas
         %>% mutate (
           calc = (t - lag(t)) / as.integer((date_heure - lag(date_heure)))
        )
)

Обратите внимание, что значение calc для первой строки будет NA.Следовательно, вам, возможно, придется пропустить и присвоить ему значение по умолчанию, прежде чем строить свою фигуру.

Например:

datas <- datas[-1,]  # To skip the first `NA` value
datas[1,]$calc <- 0  # To give it a default value of `0`

Надеюсь, это поможет.

0 голосов
/ 20 сентября 2019

В следующих строках будет добавлена ​​новая строка с задержанными значениями времени для группы.

library(dplyr)
data <- 
    data %>%
    group_by(groups) %>%
    mutate(lag.value = dplyr::lag(value, n = 1, default = NA))

Аналогичным образом, вы можете добавить еще один столбец, в котором рассчитываете 1-й (прямой) коэффициент разницы по выбранной вами формуле.Обратите внимание, что если у вас есть NA значения, все может стать более сложным.

Больше объяснений и альтернативных подходов вы найдете на Как создать переменную отставания в каждой группе?

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