首页 > 解决方案 > 加入/合并整洁的时间序列数据 r

问题描述

我想知道在应用整洁数据的主体时加入时间序列数据的正确/最佳方法。

问题是连接函数连接了所有匹配的行。这导致连接数据集中的行数大量增加。

例如,如果我有两个带有时间序列的整洁数据集:

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()。如果我有很多时间步长和很多变量,那么这个解决方案似乎会非常费力。

鉴于时间序列数据的常见程度以及整洁数据的重要性,我假设有一种简单的方法来管理它。抱歉,如果我忽略了一些简单的事情。

标签: rjointime-seriestidyr

解决方案


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

推荐阅读