【问题标题】:Cbinding Problems绑定问题
【发布时间】:2015-09-01 19:31:47
【问题描述】:

我有一个如下数据集,我的目标是按日期对每个数据帧(df1、df2 和 df3)进行 cbind:

df1

Date           COL1      
2015-05-27      5           
2015-05-28      7      
2015-05-29      8       
2015-05-30      7    
2015-05-31      4   
2015-06-01      8  

df2

Date           COL2        
2015-05-28       6       
2015-05-29       9
2015-05-30      10
2015-05-31      11
2015-06-01      12

df3

Date            COL3
2015-01-01      12
2015-01-02       8
 .
 .
 .
 .
2015-06-01      20

我想将这些 cbind 绑定到日期。常规 cbind 不起作用,因为它具有不同的行数。当我执行 cbind.fill 时,即使我使用 all.x=TRUE,NA 也会超出数据框

所以最终结果应该是这样的:

   Date        COL3   COL2  COL1
2015-01-01      12     NA    NA
2015-01-02       8     NA    NA
 .              .      .     .
 .              .      .     .
 .              .      .     .
 .              .      .     .
2015-05-31      12     11    4
2015-06-01      20     12    8

任何帮助都会很棒,谢谢!

【问题讨论】:

  • 这里的逻辑是什么?你只是想把NA 移到底部?
  • 他好像是想按照Date2来排列Date2Col2,不过我这里估计有点。 @OP,你到底是什么意思?另外,请让您的示例可重现,以获取提示see here
  • merge(df[,1:2],df[,3:4],by.x="Date",by.y="Date2",all=TRUE)
  • 这里请注意:根据事实上的标准,数据框通常应该在每一行中具有 [独立] 观察值,在每列中具有变量。通过做你想做的事,你会把观察结果弄乱。如果它们代表不同的事物,我建议您将它们放入不同的数据框 (df1<-df[,1:2]; df2<-df[,3:4])。当然,我可能是错的,你可以有一个非常明确的理由让他们像你一样......
  • 您需要merge,而不是cbind,并且您需要使用mgetls 组合将这些数据框放入一个列表中。见here如果从那里怎么取

标签: r merge cbind


【解决方案1】:
testing5<-merge(df1[,1:2],df2[,1:2],by.x="Date",by.y="Date",all=TRUE)
testing6<-merge(testing5,df3[,1:2],by.x="Date",by.y="Date",all=TRUE)
testing6

【讨论】:

  • 或者你可以忽略我的评论并制定一个通用解决方案(对于未知数量的数据集),然后执行Reduce(function(...) merge(..., by = "Date", all = TRUE), mget(ls(pattern = "df\\d+")))
  • 或者将数据框放在一个列表中,避免在你的全局环境中使用对象。 @Nick 您能否添加一些上下文为什么这可以解决您的问题,这将使答案更容易理解。
  • 我正在使用 dygraphs 并希望在图表中创建每条单独的线对应于相同的日期范围,为此,我需要将数据框合二为一
猜你喜欢
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
  • 2016-03-19
  • 2010-12-16
  • 2011-11-03
  • 2012-01-03
相关资源
最近更新 更多