【问题标题】:bind different size different name dataframes绑定不同大小不同名称的数据框
【发布时间】:2015-02-07 17:59:27
【问题描述】:

我有一些具有不同列数和不同命名列的数据框,我想将它们绑定在一起。我想将 euro.fix.data 数据帧绑定到 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

【问题讨论】:

  • 感谢@jbaums。据我所知,至少我一直在使用它的方式,merge() 是一个连接,它依赖于匹配某些列(或行?)中的公共数据值。无论如何,两个数据帧中没有共同的数据值。我正在尝试做的堆叠或“绑定”
  • 如果基本合并不是您的目标,这可能有助于显示您想要的输出。
  • 感谢@cdeterman。如果第二个数据框的列数与第一个相同,并且名称相同,则所需的结果基本上是 rbind。
  • 我明白了,你可能在 dplyr::rbind_list 之后,这将用 NA 填充缺失的列。
  • 或者你可以使用library(data.table); rbindlist(list(dat1, dat2), fill=TRUE)

标签: r merge dataframe rbind


【解决方案1】:

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

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 ...

【讨论】:

    猜你喜欢
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 2015-02-17
    • 1970-01-01
    相关资源
    最近更新 更多