绑定不同大小的不同名称数据帧

时间:2014-12-09 18:08:15

标签: r merge dataframe rbind

我有一些数据帧具有不同数量的列和不同名称的列,我想将它们绑定在一起。我想将euro.fix.data dataframe绑定到euro.prefix.data数据帧。我想这可能涉及复制列并重命名它们以使data.frames保持一致,但我正在寻找一种更简单的方法。无论如何,如果数据帧的列数相同,那么忽略命名约定并简单地绑定?

在任何情况下,我甚至无法确定如何复制数据帧列而不进行硬编码显式赋值,因为我希望数据帧具有列数。

期望的输出会是这样的:

epd <- euro.fix.data[which(euro.fix.data$date >= init.euro.fix.date), ]

df <- data.frame(date = epd$date, DEM.Curncy = epd$EUR.Curncy, ATS.Curncy = epd$EUR.Curncy, BEF.Curncy = epd$EUR.Curncy, NLG.Curncy = epd$EUR.Curncy, FIM.Curncy = epd$EUR.Curncy, FRF.Curncy = epd$EUR.Curncy, IEP.Curncy = epd$EUR.Curncy, ITL.Curncy = epd$EUR.Curncy, PTE.Curncy = epd$EUR.Curncy, ESP.Curncy = epd$EUR.Curncy, DKK.Curncy = epd$EUR.Curncy)

results <- rbind(euro.prefix.data, df)

显然,这是一个非常糟糕的解决方案。我正在寻找可以推广的东西。 一个开始就是简单地能够创建一个数据框,这只是在列上复制多次。

任何指导意见。谢谢。

head(euro.prefix.data)
        date DEM.Curncy ATS.Curncy    BEF.Curncy NLG.Curncy FIM.Curncy FRF.Curncy   IEP.Curncy    ITL.Curncy PTE.Curncy
1 1988-12-30  -0.000677  -0.000721 -0.0009014423  -0.000649   0.000090   0.000099 -0.001141827 -0.0004649038   0.000935
2 1989-01-06  -0.000910  -0.000608 -0.0009134615  -0.000830   0.000384  -0.000323 -0.001153846 -0.0004711538   0.000674
3 1989-01-13   0.000109   0.001022 -0.0009134615   0.000205   0.000971   0.000600 -0.001153846 -0.0004711538   0.000660
4 1989-01-20  -0.000990   0.001100 -0.0009134615   0.000060  -0.000029   0.000199 -0.001153846 -0.0004711538   0.002389
5 1989-01-27  -0.000134  -0.001147 -0.0009134615  -0.001331  -0.000989  -0.001459 -0.001153846 -0.0004711538  -0.000821
6 1989-02-03  -0.000133  -0.001151 -0.0010697115  -0.001743  -0.000778   0.000137 -0.001310096 -0.0006197115   0.000695
  ESP.Curncy DKK.Curncy
1  -0.001635  -0.000055
2   0.002641  -0.003195
3   0.003452  -0.001496
4  -0.001926  -0.000402
5   0.001750  -0.001642
6  -0.000844  -0.001076



> head(euro.fix.data[which(euro.fix.data$date >= init.euro.fix.date), ])
          date    EUR.Curncy
105 1999-01-01 -0.0004074215
106 1999-01-08 -0.0003545854
107 1999-01-15 -0.0003652404
108 1999-01-22 -0.0003650181
109 1999-01-29 -0.0003209615
110 1999-02-05 -0.0003106008

1 个答案:

答案 0 :(得分:0)

试试这个......请注意,这是一个猜测,因为我的问题演示几乎与其他评论者一样困难:

post.fix <- data.frame( date=euro.prefix.data$date, 
                        stack(euro.prefix.data[-1])

这显示了结果的结构,这显然是无稽之谈,但表明您可能需要保留有关正在记录哪种货币的信息,而这不是您当前的问题描述似乎正在考虑的内容。通过R的论证回收过程复制日期。

> str(data.frame(mpg=mtcars$mpg, stack(mtcars[-1]) ))
'data.frame':   320 obs. of  3 variables:
 $ mpg   : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ values: num  6 6 4 6 8 6 8 4 4 6 ...
 $ ind   : Factor w/ 10 levels "am","carb","cyl",..: 3 3 3 3 3 3 3 3 3 3 ...