加入/合并整齐的时间序列数据r

时间:2018-10-03 17:21:07

标签: r join time-series tidyr

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

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

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

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 :(得分:0)

public class Flight { protected int flightNum; protected string origin, destination; protected CustomerManager cxList; public Flight(int flNum, string orig, string dest, int maxSe) { cxList = new CustomerManager(0, maxSe); origin = orig; destination = dest; flightNum = flNum } public bool addPass(Customer cx) { return cxList.addCustomer(cx.getCID(),cx.getFN(), cx.getlN(),cx.getcNum()); } } 功能可能是您在这里需要的:

merge