Я задаюсь вопросом о правильном / наилучшем способе объединения данных временных рядов при применении принципов аккуратных данных.
Проблема в том, что функции объединения объединяют все строки, для которых есть совпадение.Это приводит к значительному увеличению числа строк в объединенном наборе данных.
Так, например, если у меня есть два аккуратных набора данных с временными рядами:
df1 <- data.frame(location = c(1, 1, 1, 1, 2, 2, 2, 2),
time = c(1, 2, 3, 4, 1, 2, 3, 4),
color = c(1, 2, 3, 4, 5, 6, 7, 8))
df2 <- data.frame(location = c(1, 1, 1, 1, 2, 2, 2, 2),
time = c(1, 2, 3, 4, 1, 2, 3, 4),
intensity = c(8, 7, 6, 5, 4, 3, 2, 1))
, и я смотрю на них left_join, я получаю огромный кадр данных, так как все строки с местоположением 1 будут захвачены:
> left_join(df1, df2, by = "location")
location time.x color time.y intensity
1 1 1 1 1 8
2 1 1 1 2 7
3 1 1 1 3 6
4 1 1 1 4 5
5 1 2 2 1 8
6 1 2 2 2 7
7 1 2 2 3 6
8 1 2 2 4 5
9 1 3 3 1 8
10 1 3 3 2 7
11 1 3 3 3 6
12 1 3 3 4 5
13 1 4 4 1 8
14 1 4 4 2 7
15 1 4 4 3 6
16 1 4 4 4 5
17 2 1 5 1 4
18 2 1 5 2 3
19 2 1 5 3 2
20 2 1 5 4 1
21 2 2 6 1 4
22 2 2 6 2 3
23 2 2 6 3 2
24 2 2 6 4 1
25 2 3 7 1 4
26 2 3 7 2 3
27 2 3 7 3 2
28 2 3 7 4 1
29 2 4 8 1 4
30 2 4 8 2 3
31 2 4 8 3 2
32 2 4 8 4 1
Что я хочу:
location time color intensity
1 1 1 1 8
2 1 2 2 7
3 1 3 3 6
4 1 4 4 5
5 2 1 5 4
6 2 2 6 3
7 2 3 7 2
8 2 4 8 1
Как я могу присоединиться к этим аккуратным данным по "местоположению"?Должен ли я сначала spread()
данные, join()
, а затем gather()
.Похоже, это решение будет очень трудоемким, если у меня будет много временных шагов и много переменных.
Учитывая, как часто встречаются данные временных рядов, и важность аккуратных данных, я предполагаю, что есть простой способ справиться с этим.Извините, если я пропускаю что-то простое.