如何合并两个不重叠日期的数据框?

时间:2014-05-16 23:29:24

标签: r date datetime

我有一个包含以下变量的数据集:

  • 步骤:以5分钟为间隔的步骤数
  • date :以YYYY-MM-DD格式进行测量的日期
  • interval :进行测量的5分钟间隔的标识符(每天288个间隔)

主要数据集:

> head(activityData, 3)
      steps       date interval
1 1.7169811 2012-10-01        0
2 0.3396226 2012-10-01        5
3 0.1320755 2012-10-01       10
> str(activityData)
'data.frame':   17568 obs. of  3 variables:
 $ steps   : num  1.717 0.3396 0.1321 0.1509 0.0755 ...
 $ date    : chr  "2012-10-01" "2012-10-01" "2012-10-01" "2012-10-01" ...
 $ interval: num  0 5 10 15 20 25 30 35 40 45 ...

数据集的范围为两个月。

我不得不将其分为工作日周末日。我用以下功能做到了:

> dataAs.xtsWeekday <- dataAs.xts[.indexwday(dataAs.xts) %in% 1:5]

> dataAs.xtsWeekend <- dataAs.xts[.indexwday(dataAs.xts) %in% c(0, 6)]

执行此操作后,我不得不进行一些计算,我失败了,所以我决定再次导出文件并将其读入。

在我再次导入数据后,我进行了我想要的计算,并尝试合并2个数据集,但没有成功。

第一组数据:

 > head(weekdays, 3)  
      X   steps       date interval daytype  
    1 1 37.3826 2012-10-01        0 weekday  
    2 2 37.3826 2012-10-01        5 weekday  
    3 3 37.3826 2012-10-01       10 weekday 

     > str(weekdays)  
    'data.frame':   12960 obs. of  5 variables:  
     $ X       : int  1 2 3 4 5 6 7 8 9 10 ...  
     $ steps   : num  37.4 37.4 37.4 37.4 37.4 ...  
     $ date    : chr  "2012-10-01" "2012-10-01" "2012-10-01" "2012-10-01" ...  
     $ interval: int  0 5 10 15 20 25 30 35 40 45 ...  
     $ daytype : chr  "weekday" "weekday" "weekday" "weekday" ...  

第二组数据:

> head(weekend, 3)
  X steps       date interval daytype
1 1     0 2012-10-06        0 weekend
2 2     0 2012-10-06        5 weekend
3 3     0 2012-10-06       10 weekend
> str(weekend)
'data.frame':   4608 obs. of  5 variables:
 $ X       : int  1 2 3 4 5 6 7 8 9 10 ...
 $ steps   : num  0 0 0 0 0 0 0 0 0 0 ...
 $ date    : chr  "2012-10-06" "2012-10-06" "2012-10-06" "2012-10-06" ...
 $ interval: int  0 5 10 15 20 25 30 35 40 45 ...
 $ daytype : chr  "weekend" "weekend" "weekend" "weekend" ...

现在我想按日期合并2个数据集(工作日,周末),但问题是我没有任何共同日期或其他常见日期。

最终数据集应包含4列和17568个观测值。

列应为:

  • 步骤:以5分钟为间隔的步骤数
  • 日期:以YYYY-MM-DD格式进行测量的日期
  • interval:进行测量的5分钟间隔的标识符
  • daytype :周末或正常工作日。

我尝试过:

   merge  
   join(plyr)  
   union  

我看到所有数据集中的所有数据集在两个数据集中都有一个公共ID或公共列,与我的情况不同。

我也看了here,但我对其他许多人并不了解,但他们与我的数据集没有任何共同之处。

我想到的另一个选项是在原始数据集中添加一个列并调用它 &#34; ID&#34;并重做我到目前为止所做的一切;如果我找不到解决这个问题的办法,我必须做的事情。

我想就如何继续或下一步尝试提供一些建议。

1 个答案:

答案 0 :(得分:1)

既然你提到你的最终数据集应该有17568(= 4608 + 12960)个观察/行,我假设你想要将两个data.frames相互叠加(并且可能在之后按日期排序)。这是通过使用rbind()完成的。

finaldata <- rbind(weekdays, weekend)

如果您要删除列X

finaldata$X <- NULL

要将date列转换为实际日期:

finaldata$date <- as.Date(finaldata$date, format="%Y-%m-%d")

按日期订购整个数据:

finaldata <- finaldata[order(finaldata$date),]