【发布时间】:2017-09-10 10:50:23
【问题描述】:
我目前在 R 中使用 48 种货币,并希望合并或覆盖两个数据集。
对于所有货币,我在 DF1 中有 1980 年到 2017 年的数据。对于其中的 16 个,我还拥有 DF2 中从 1970/1971 年到 2017 年的数据。我想做的是将 DF2 的 1970-1980 部分放在 DF1 的顶部。我想如果我设法将 DF1 合并到 DF2 中以获取它们都具有值的单元格(因此 DF1 覆盖 DF2),我想我会得到相同的结果。但是,并非所有货币的开始日期都完全相同,所以我不能硬编码。
下面是一个示例,向您展示它的外观:
Date是时间变量(每月数据)。 DF1 对应于 1980-2017 年的数据,DF2 对应于 1970-2017 年的数据。我的目标是根据列 ID 和行 ID 将 DF1 中的值覆盖到 DF2 中。 DF3 是所需的输出。
DF1=data.frame(matrix(data=c(c(4:9),rnorm(12)),6,3))
DF2=data.frame(matrix(data=c(c(1:12),rnorm(36)),12,4))
names(DF1)=c("Date","Currency1","Currency3")
names(DF2)=c("Date","Currency1","Currency2","Currency3")
> DF1
Date Currency1 Currency3
1 4 -0.8356286 0.5757814
2 5 1.5952808 -0.3053884
3 6 0.3295078 1.5117812
4 7 -0.8204684 0.3898432
5 8 0.4874291 -0.6212406
6 9 0.7383247 -2.2146999
> DF2
Date Currency1 Currency2 Currency3
1 1 1.12493092 -0.15579551 1.1000254
2 2 -0.04493361 -1.47075238 0.7631757
3 3 -0.01619026 -0.47815006 -0.1645236
4 4 0.94383621 0.41794156 -0.2533617
5 5 0.82122120 1.35867955 0.6969634
6 6 0.59390132 -0.10278773 0.5566632
7 7 0.91897737 0.38767161 -0.6887557
8 8 0.78213630 -0.05380504 -0.7074952
9 9 0.07456498 -1.37705956 0.3645820
10 10 -1.98935170 -0.41499456 0.7685329
11 11 0.61982575 -0.39428995 -0.1123462
12 12 -0.05612874 -0.05931340 0.8811077
> DF3
Date Currency1 Currency2 Currency3
1 1 1.12493092 -0.15579551 1.1000254
2 2 -0.04493361 -1.47075238 0.7631757
3 3 -0.01619026 -0.47815006 -0.1645236
4 4 -0.83562861 0.41794156 0.5757814
5 5 1.59528080 1.35867955 -0.3053884
6 6 0.32950777 -0.10278773 1.5117812
7 7 -0.82046838 0.38767161 0.3898432
8 8 0.48742905 -0.05380504 -0.6212406
9 9 0.73832471 -1.37705956 -2.2146999
10 10 -1.98935170 -0.41499456 0.7685329
11 11 0.61982575 -0.39428995 -0.1123462
12 12 -0.05612874 -0.05931340 0.8811077
【问题讨论】:
标签: r dataframe merge overriding