无法找出R中的嵌套循环

nit

我无法弄清楚如何在R中使用嵌套的for循环来解决我的问题。这是我要解决的微型版本:

我有两个文件,test1test2看起来像这样:

head(test1)

      Date Settlement
2008-08-28     138.29
2008-08-29     135.34
2008-09-01     135.23
2008-09-02     123.36
2008-09-03     126.41
2008-09-04     128.68
2008-09-05     123.70
2008-09-08     124.60
2008-09-09     122.33
2008-09-10     120.85
2008-09-11     120.15
2008-09-12     121.17
2008-09-15     118.97
2008-09-16     114.90
2008-09-17     115.78
2008-09-18     115.60
2008-09-19     115.90
2008-09-22     120.49
2008-09-23     124.10

这是test2

test2

X1         X2         X3
2008-08-31 2008-09-05 2008-09-11
2008-09-05 2008-09-11 2008-09-14
2008-09-11 2008-09-14 2008-09-18
2008-09-14 2008-09-18 2009-09-22

我需要输入的逻辑是:

  1. test2中选择日期[1,1]和[1,2]
  2. test1中查找这两个日期之间的所有结算价格
  3. 获得这些价格的平均值,将其放在新数据框的[1,1]中。
  4. 通过增加列,然后增加pt1中的行来重复。

最终结果将如下所示:

X1          X2
128.42  122.87
122.87  120.66
120.66  116.55
116.55  115.75

因此,在X1的第一值是平均值的沉降31 - 8 - 08(包括)和5-九月-08(不包括)之间的价格,并且在第一值X2是平均沉降5九月08之间的价格(包括)和08年9月11日(不包括),依此类推。

这是我的代码有效(如果我通过test2的固定日期,如下所示):

temp1 <- test1 %>%
  group_by(Date >= test2$X1[1] & Date < test2$X2[1]) %>%
  summarise(AvgPrice2 = mean(Settlement, na.rm = T))

temp1 <- filter(temp1, temp1[,1]==TRUE)

但是,无论我尝试什么(过去3天!),我都无法弄清楚如何将其放入for循环中。即使尝试过rollapplysapply...也无法使任何东西正常工作。代码不必太浪费时间,我只需要自动化这个过程即可。

我使用R已有一段时间了,但是显然这对高级用户来说是个问题...深深感谢在此方面的任何帮助。

提前谢谢了。

nit

非常感谢所有答案,我尝试了所有答案,但鉴于上述文件是实际文件的缩小版本,因此似乎都不满足我的需求-因此按列名编码/手动将数据拆分为行似乎不像对我来说是一个不错的选择。

但是我终于弄清楚了在这种情况下什么会很好地工作:

  library(lubridate)
  Makingrows <- function(test1, test2, j){
     res<<- NULL
     m1 = nrow(test2)

     for(i in 1:m1){
        d1 <- ymd(test2[i,j])
        d2 <- ymd(test2[i,j+1])
        X1 <- filter(test1, Date < d2 & Date >= d1)
        res[i] <- mean(X1$Settlement, na.rm = T)
  }
  return(res)
}

 mcol1 <- ncol(test2)-1
 finalres <- lapply(1:mcol1, function(x) Makingrows(test1, test2, x))
 finalres <- as.data.frame(finalres)

是的,我也得到了最后一个值119.02 ...我意识到错误地将年份2009放在了test2文件的最后一个单元格中。因此,代码将选择所有值,直到最后。

非常感谢大家。希望您会同意我的看法,因为我将其标记为我的问题的答案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章