объединить / объединить данные - PullRequest
0 голосов
/ 03 октября 2018

Я задаюсь вопросом о правильном / наилучшем способе объединения данных временных рядов при применении принципов аккуратных данных.

Проблема в том, что функции объединения объединяют все строки, для которых есть совпадение.Это приводит к значительному увеличению числа строк в объединенном наборе данных.

Так, например, если у меня есть два аккуратных набора данных с временными рядами:

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().Похоже, это решение будет очень трудоемким, если у меня будет много временных шагов и много переменных.

Учитывая, как часто встречаются данные временных рядов, и важность аккуратных данных, я предполагаю, что есть простой способ справиться с этим.Извините, если я пропускаю что-то простое.

1 Ответ

0 голосов
/ 03 октября 2018

merge функция может быть то, что вам нужно здесь:

> merge(df1, df2)
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
...