【发布时间】:2020-10-13 14:32:08
【问题描述】:
我有两个数据框 df_1 和 df_2 超过 5000 个观察值(行)。我想基于Date 和Mcode 两个相似的列合并它们,以使行在两个数据帧中均匀分布。详情见下文。
>df_1
Date Mcode TNo. BSize
1 1/8/2014 3R72B7K8ZN 1426576 7.2
2 1/8/2014 3R72B7K8ZN 1426578 7.5
3 1/8/2014 3R72B7K8ZN 1426579 7.5
4 1/8/2014 8R55BNW9H5 1426581 7.2
5 1/8/2014 8R55BNW9H5 1426582 7.5
6 1/8/2014 8R55BNW9H5 1426584 7.5
7 1/8/2014 3R72B7K8ZN 1426606 7.5
8 1/8/2014 3R72B7K8ZN 1426610 7.2
9 1/8/2014 8R55BNW9H5 1426621 7.5
10 1/8/2014 8R55BNW9H5 1426624 7.5
11 2/8/2014 4R72B7K9ZN 1426626 7.5
12 2/8/2014 4R72B7K9ZN 1426627 7.5
13 2/8/2014 8R55BNW9H5 1426638 7.2
14 2/8/2014 8R55BNW9H5 1426639 7.2
15 2/8/2014 4R60B6K6ZN 1426699 7.5
16 3/8/2014 4R60B6K6ZN 1426701 1.5
17 3/8/2014 4R72B7K9ZN 1426703 7.5
18 3/8/2014 4R60B6K6ZN 1426704 7.5
19 3/8/2014 4R72B7K9ZN 1426705 7.5
20 3/8/2014 4R72B7K9ZN 1426706 7.2
类似的第二个数据框如下。
>df_2
Date Mcode X28days X7days
1 1/8/2014 3R72B7K8ZN 64.0 51.1
2 1/8/2014 3R72B7K8ZN 65.0 51.6
3 1/8/2014 8R55BNW9H5 75.4 58.4
4 1/8/2014 8R55BNW9H5 78.7 57.1
5 2/8/2014 4R72B7K9ZN 75.7 58.8
6 2/8/2014 4R72B7K9ZN 73.9 56.9
7 2/8/2014 8R55BNW9H5 77.3 60.8
8 2/8/2014 4R60B6K6ZN 62.6 48.5
9 3/8/2014 4R72B7K9ZN 71.2 56.1
10 4/8/2014 4R60B6K6ZN 59.3 46.8
11 4/8/2014 4R60B6K7ZN 68.5 51.2
我想合并df_1 和df_2,这样得到的df_3(与df_1 的行数相同)应如下所示
>df_3
Date Mcode TNo. BSize X28days X7days
1 1/8/2014 3R72B7K8ZN 1426576 7.2 64.0 51.1
2 1/8/2014 3R72B7K8ZN 1426578 7.5 64.0 51.1
3 1/8/2014 3R72B7K8ZN 1426579 7.5 64.0 51.1
4 1/8/2014 8R55BNW9H5 1426581 7.2 75.4 58.4
5 1/8/2014 8R55BNW9H5 1426582 7.5 75.4 58.4
6 1/8/2014 8R55BNW9H5 1426584 7.5 75.4 58.4
7 1/8/2014 3R72B7K8ZN 1426606 7.5 65.0 51.6
8 1/8/2014 3R72B7K8ZN 1426610 7.2 65.0 51.6
9 1/8/2014 8R55BNW9H5 1426621 7.5 78.7 57.1
10 1/8/2014 8R55BNW9H5 1426624 7.5 78.7 57.1
11 2/8/2014 4R72B7K9ZN 1426626 7.5 75.7 58.8
12 2/8/2014 4R72B7K9ZN 1426627 7.5 75.7 58.8
13 2/8/2014 8R55BNW9H5 1426638 7.2 77.3 60.8
14 2/8/2014 8R55BNW9H5 1426639 7.2 77.3 60.8
15 2/8/2014 4R60B6K6ZN 1426699 7.5 62.6 48.5
16 3/8/2014 4R60B6K6ZN 1426701 1.5 NA NA
17 3/8/2014 4R72B7K9ZN 1426703 7.5 71.2 56.1
18 3/8/2014 4R60B6K6ZN 1426704 7.5 NA NA
19 3/8/2014 4R72B7K9ZN 1426705 7.5 71.2 56.1
20 3/8/2014 4R72B7K9ZN 1426706 7.2 71.2 56.1
如果我们运行df_3%>%filter(Date=="1/8/2014", Mcode=="3R72B7K8ZN"),它会给出
Date Mcode TNo. BSize X28days X7days
1 1/8/2014 3R72B7K8ZN 1426576 7.2 64 51.1
2 1/8/2014 3R72B7K8ZN 1426578 7.5 64 51.1
3 1/8/2014 3R72B7K8ZN 1426579 7.5 64 51.1
4 1/8/2014 3R72B7K8ZN 1426606 7.5 65 51.6
5 1/8/2014 3R72B7K8ZN 1426610 7.2 65 51.6
见
df_2 的前两行平均分布在 df_3 的最终或合并数据集中。对于所有行都可以看到类似的合并模式。
笔记:
我希望这种类型的合并用于大小大于 30x5000(col x 行)的完整数据集。
在完整的数据中
日期是 2014 年和 2015 年(超过 700 个日期),Mcode 有 30 多种不同的类型。
谁能帮助我,我将不胜感激。
【问题讨论】:
-
您提到“基于日期和 Mcode 两个相似的列合并它们”。但是看起来两个数据帧都有重复的值,你希望合并的结果与第一个数据帧的行长相同吗?
-
这是主要问题,重复导致行的平均分布问题,这就是为什么我在这里,是的,最终数据的长度应该等于第一个更大的数据帧