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

时间:2017-10-26 07:07:19

标签: r dataframe cbind

我有两种格式的数据框

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

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

2 个答案:

答案 0 :(得分:0)

以下解决方案不具有相同的列顺序,或者日期不会多次出现。我真的不认为有很多原因,所以我要留下以下解决方案。

假设数据唯一,如果不是,请不要使用此方法。

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

答案 1 :(得分:0)

我们可以对列序列使用order,然后根据names获取order数据集,使用'日期&#39获取rbind ;用于创建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

注意:最好在数据集

中包含唯一的列名称