【问题标题】:Merging Data Frames with Different Number of Rows合并具有不同行数的数据框
【发布时间】:2015-07-30 13:06:38
【问题描述】:

我有两个具有以下格式的数据框:

Date          COL1    COL2  COL3   COL4 
7/1/2015    Company1    0    0       0       
7/2/2015    Company1    1    0       0  
7/3/2015    Company1    0    0       8  
7/4/2015    Company1    0    3       0  
7/1/2015    Company2    0    0       0  
7/2/2015    Company2    5    9       10 
7/3/2015    Company2    0    0       0  
7/4/2015    Company2    1    0       0
7/1/2015    Company3    0    0       0  

第二个数据框如下所示:

   Date       COL1    COL2  COL3   COL4 
7/1/2014    Company1    1    6       4       
7/3/2014    Company1    4    9       5  
7/4/2014    Company1    5    2       6  
7/5/2014    Company1    4    2       8  
7/2/2014    Company2    8    9       32 
7/3/2014    Company2    9    12      8  
7/1/2014    Company3    4    5       6  

我想合并它们,最终看起来像这样:

   Date       COL1    COL2  COL3   COL4     Date       COL1     COL2   COL3   COL4
7/1/2014    Company1    1    6       4    7/1/2015   Company1     0     0      0
7/2/2014    Company1    0    0       0    7/2/2015   Company1     1     0      0
7/3/2014    Company1    4    9       5    7/3/2015   Company1     0     0      8
7/4/2014    Company1    5    2       6    7/4/2015   Company1     0     3      0
7/5/2014    Company1    4    2       8    7/5/2015   Company1     0     0      0
7/1/2014    Company2    0    0       0    7/1/2015   Company2     0     0      0
7/2/2014    Company2    8    9       32   7/2/2015   Company2     5     9     10
7/3/2014    Company2    9    12      8    7/3/2015   Company2     0     0      0
7/4/2014    Company2    0    0       0    7/4/2015   Company2     1     0      0
7/1/2014    Company3    4    5       6    7/1/2015   Company3     0     0      0

所以基本上我想按日期和公司合并。目标是即使其中一个数据框中缺少数据点,也要对齐日期,并将其替换为 0。

如果有人能提供帮助,将不胜感激!

【问题讨论】:

  • 您的日期在两个数据框之间相隔一年。这是故意的吗?
  • 是的,如果不是相隔一年,我知道这将是一个简单的合并,但由于年份分离,我发现很难做到这一点。 @A.Webb
  • 从 Date 列创建 Month 和 Day 列,然后在 Company、Month、Day 3 列上合并。

标签: r merge dataframe lubridate


【解决方案1】:

你可以试试这样的:

#parse dates
df1$Date <- as.Date(df1$Date,format="%m/%d/%Y")
df2$Date <- as.Date(df2$Date,format="%m/%d/%Y")

#create day/month column
df1$day_month <- format(df1$Date, "%m/%d")
df2$day_month <- format(df2$Date, "%m/%d")

#merge using day/month and company, all=T will print all rows
merge(df1,df2,by=c("day_month","COL1"),all=T)

【讨论】:

  • 感谢您的帮助!我唯一想要的是按日期排序,然后按公司排序。因此,您将为一家公司列出 7/1/14-7/8/14 的日期,然后为下一家公司从 7/1/14-7/8/14 重新开始。 @NicE
  • 实际上@NicE 我能够将你给我的结果导出到 Excel 中,然后按这种方式排序。救了我!
  • 简单地交换by的顺序。
猜你喜欢
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-23
  • 2018-08-06
相关资源
最近更新 更多