R列匹配

时间:2014-11-01 03:57:17

标签: r date

我有一组日期(参考日期)和一个数据框,用于支持某些公司在特定时间段内的收盘价。我想检查所有公司的数据是否与参考日期清单中的每个日期相对应。所以,我基本上想要确定缺少的日期并将它们插入到公司数据中。

我的数据看起来像这样 -

Company Code     Date              Closing Price                                  

ABB.NS          2010-08-09         288.12
ABB.NS          2010-08-10         289.2
ABB.NS          2010-08-12         302
.
.
.
ABB.NS          2010-08-30         278
ABAN.NS         2010-08-09         97.8
ABAN.NS         2010-08-10         98.6
.
.
.
ABAN.NS         2010-08-30        102.6 

我的日期列表包括08/2010个月的所有日期。因此,我的代码应该与给定数据集的日期匹配,确定所有公司中缺少的日期。 (此处,例如ABB缺少“2010-08-11”)并为缺失的数据插入一行,其中收盘价格低于上一个和下一个收盘价的平均值。所以,这里它将是(289.2 + 302)/ 2。

我尝试使用匹配功能。但我无法将其整合到这个确切的目的。有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

尝试

res <- merge(df,df1, by=c('Date', 'Company.Code'),all=TRUE)
library(zoo)
res$Closing.Price <- na.locf(na.approx(res$Closing.Price,
                                   na.rm=FALSE), na.rm=FALSE)

res1 <- res[with(res, order(Company.Code, Date)),]
row.names(res1) <- NULL
res1[41:43,]
#         Date Company.Code Closing.Price
#41 2010-08-10       ABB.NS         289.2
#42 2010-08-11       ABB.NS         295.6
#43 2010-08-12       ABB.NS         302.0

数据

 df <- structure(list(Company.Code = c("ABB.NS", "ABB.NS", "ABB.NS", 
 "ABB.NS", "ABAN.NS", "ABAN.NS", "ABAN.NS"), Date = structure(c(14830, 
 14831, 14833, 14851, 14830, 14831, 14851), class = "Date"), Closing.Price =
 c(288.12, 289.2, 302, 278, 97.8, 98.6, 102.6)), .Names = c("Company.Code", 
 "Date", "Closing.Price"), row.names = c(NA, -7L), class = "data.frame")

 UnComp <- unique(df$Company.Code)
 df1 <- data.frame(Company.Code= rep(UnComp, each=31),
         Date=rep(seq(as.Date('2010-08-01'), by='1 day', 
            length.out=31),length(UnComp))