逐列合并两个数据框。 (从两个数据框中创建 table)

Merge Two data frames column by column. (creating a table out of two data frames)

我有两个这种格式的数据框

df1=data.frame( Date = c(1,2,3,4,5), customer1 = c(6,7,8,4,2), customer2 = 
c(2,3,6,5,3)... )
df2=data.frame( Date = c(1,2,3,4,5), order1 = c(0,1,3,0,1), order2 = 
c(0,1,0,0,2).. )

我想要一个将两个数据框与日期列交织在一起的结果。

Date Customer1 Order1 Date Customer2 Order2 Date ....
 1      6        0     1       2       0     1
 2      7        1     2       3       1     2
 3      8        3     3       6       0     3
 4      4        0     4       5       0     4
 5      2        1     5       3       2     5

我使用了 for 循环 运行。列和 cbind 以获得所需的结果。我想知道是否有更简单、更有效的方法来做到这一点。

以下解决方案的列顺序不同或日期未出现多次。我真的不认为这两者都有很多原因,所以我将离开以下解决方案。

它假定数据是唯一的,否则不要使用此方法。

merge(df1, df2, key = date)
# Date customer1 customer2 order1 order2
# 1    1         6         2      0      0
# 2    2         7         3      1      1
# 3    3         8         6      3      0
# 4    4         4         5      0      0
# 5    5         2         3      1      2

我们可以在列序列上使用order,然后根据orderrbind和'Date'得到数据集names column 创建一个 vector 的列名。这可用于对完整数据集中的列进行排序 (cbind(df1, df2))

cbind(df1, df2)[c(rbind('Date', matrix(c(names(df1)[-1], 
       names(df2)[-1])[order(c(seq_along(df1)[-1], seq_along(df2)[-1]))], ncol=2)))]
#      Date customer1 order1 Date.1 customer2 order2
#1    1         6      0      1         2      0
#2    2         7      1      2         3      1
#3    3         8      3      3         6      0
#4    4         4      0      4         5      0
#5    5         2      1      5         3      2

注意:最好在数据集中使用唯一的列名