Есть много способов построить эти данные, как вы описываете. Это может быть не то, что вы ищете, поэтому, пожалуйста, будьте более конкретными, если вам нужно что-то еще.
Сначала мы начнем с ваших данных в том формате, в котором они были представлены:
df <- structure(list(ID = c(1L, 1L, 1L, 2L, 2L, 3L, 3L), Date = structure(c(1L,
3L, 5L, 2L, 7L, 4L, 6L), .Label = c("01/01/20", "02/01/20", "03/01/20",
"04/02/20", "05/01/20", "06/02/20", "07/01/20"), class = "factor"),
parameter1 = c(10L, 12L, 11L, 17L, 14L, 11L, 12L), parameter2 = c(11L,
13L, 15L, 16L, 12L, 12L, 14L), parameter3 = c(12L, 14L, 14L,
15L, 18L, 13L, 16L)), class = "data.frame", row.names = c(NA,
-7L))
df
#> ID Date parameter1 parameter2 parameter3
#> 1 1 01/01/20 10 11 12
#> 2 1 03/01/20 12 13 14
#> 3 1 05/01/20 11 15 14
#> 4 2 02/01/20 17 16 15
#> 5 2 07/01/20 14 12 18
#> 6 3 04/02/20 11 12 13
#> 7 3 06/02/20 12 14 16
Мы хотим, чтобы столбец Date
представлял фактические даты (на данный момент это вектор символов или факторов), поэтому мы преобразуем его с помощью strptime
:
df$Date <- as.POSIXct(strptime(df$Date, format = "%d/%m/%y", tz = "GMT"))
Чтобы отобразить все ваши данные на одной диаграмме, будет проще, если мы переведем ее из широкого формата в длинный формат. Мы можем сделать это с помощью tidyr::pivot_longer
:
df <- tidyr::pivot_longer(df, c("parameter1", "parameter2", "parameter3"))
df
#> # A tibble: 21 x 4
#> ID Date name value
#> <int> <dttm> <chr> <int>
#> 1 1 2020-01-01 00:00:00 parameter1 10
#> 2 1 2020-01-01 00:00:00 parameter2 11
#> 3 1 2020-01-01 00:00:00 parameter3 12
#> 4 1 2020-01-03 00:00:00 parameter1 12
#> 5 1 2020-01-03 00:00:00 parameter2 13
#> 6 1 2020-01-03 00:00:00 parameter3 14
#> 7 1 2020-01-05 00:00:00 parameter1 11
#> 8 1 2020-01-05 00:00:00 parameter2 15
#> 9 1 2020-01-05 00:00:00 parameter3 14
#> 10 2 2020-01-02 00:00:00 parameter1 17
#> # ... with 11 more rows
Теперь мы готовы к сюжету. Мы изготовим 3 грани, по одной для каждого идентификатора. Они будут содержать точки данных из каждого идентификатора, причем каждый параметр окрашен по-разному. Затем мы нарисуем наиболее подходящую прямую линию, используя geom_smooth
:
library(ggplot2)
ggplot(df, aes(Date, value, colour = name)) +
geom_point() +
geom_smooth(method = lm, formula = y ~ x, se = FALSE, linetype = 2) +
scale_x_datetime(date_labels = "%d-%b") +
facet_wrap(ID~., scales = "free_x") +
theme(axis.text.x.bottom = element_text(angle = 45, hjust = 1))
Создана 20 августа 2020 г. с помощью пакета reprex (v0.3.0)
person
Allan Cameron
schedule
20.08.2020
head()
,subset()
. Затем используйтеdput()
, чтобы дать нам что-то, что можно немедленно поместить в R. В качестве альтернативы вы можете использовать базовые наборы данных R, такие какmtcars
,iris
, и т. д.. Кроме того, не могли бы вы прислать то, что вы уже пробовали? - person Paul   schedule 20.08.2020