我们的外部数据包含每日价值(以该格式提取到数据库),需要将其添加到近似月度值,与另一个显示近似月度值的外部数据集对齐(YYYY-MM-DD的日期范围在单独的该集中的列)。新数据构成了线性回归的基础。
我们想用R来:
无法找出逻辑函数,从Data2中的info自动定义Data1中的参数。这个等式是否接近?
monthly=sum(data1$variable, if(data1$Date > Data2$StartDate & data1$Date < Data2$endDate))
data1 $变量在data1 $ Date的行中。
上述等式中的错误=错误:意外&#39;)&#39;
我们无法弄清楚如何建立这个论点。任何帮助将不胜感激!
答案 0 :(得分:0)
假设您有data1和data2,如下所示
daysInData1 <- seq(as.Date('2013-03-1'), as.Date('2014-12-07'), by = 'day')
data1 <- data.frame(Date = daysInData1, variable = runif(length(daysInData1)))
daysInData2 <- seq(as.Date('2013-03-15'), as.Date('2015-03-14'), by = 'month')
data2 <- data.frame(StartDate = daysInData2, volume = seq(length(daysInData2)), )
他们应该看起来像
>data1
Date variable
1 2013-03-01 0.944390132092
2 2013-03-02 0.168255153345
3 2013-03-03 0.919271149905
4 2013-03-04 0.456344844541
5 2013-03-05 0.365338093136
6 2013-03-06 0.158996492159
(...omit the rest)
>data2
StartDate volume
1 2013-03-15 1
2 2013-04-15 2
3 2013-05-15 3
(...omit the rest)
您可以使用for循环根据data2日期范围对data1进行分类
for( i in 1:nrow(data2))
{
data1[data1$Date >= data2[(i), 'StartDate'] & data1$Date < data2[nrow(data2), 'StartDate'], 'DateMonthlySeg'] <- data2[i, 'StartDate']
}
然后聚合以获取data1中每个类别中的总和,并与data2合并(为了方便回归)
data2 <- merge(data2, aggregate(variable ~ DateMonthlySeg, data = data1, sum),
by.x = 'StartDate', by.y = 'DateMonthlySeg')
最后,执行线性回归
>lm(volume~variable, data = data2)
Call:
lm(formula = volume ~ variable, data = data2)
Coefficients:
(Intercept) variable
10.33248635 0.04394532