我有两种格式的数据框
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 以获得所需的结果。我想知道是否有更简单,更有效的方法来做到这一点。
答案 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
注意:最好在数据集
中包含唯一的列名称