在R中找到特定的最小值

时间:2017-01-30 21:04:15

标签: r time time-series diff min

我的数据框由两列组成:光强(par)和时间,每行代表一个'快照'及时:

数据实际上是一个时间序列。附加的图像由13个数据框组成:plot(df$time, df$par)

enter image description here

我一直在尝试编写一个函数,它将返回代表黄昏(当天的第一盏灯)和黎明(当天的最后一盏灯)的数据点。

在图表上,这看起来像是图表中每个“平面”区域的第一个和最后一个点,其中par(应该)等于0。

我已经能够通过一个恶劣的循环来识别大多数,它基本上会找到min(par)的条纹,如果它找到> 100,它会保存i-100th文件:

dawnDusk <- function (df) {

  min.par <- min(df$par)
  day.streak <- 0
  night.streak <- 0
  dawn <- c()
  dusk <- c()

  for (i in 1:nrow(df)) {
    if (df$par[i] <= min.par + 0.1 | is.na(df$par[i])) {
      night.streak <- night.streak + 1
      day.streak <- 0
    } else if (df$par[i] > min.par + 0.1 | is.na(df$par[i])) {
      day.streak <-day.streak + 1
      night.streak <- 0
    }

    # the 100 comes from the shortest night in the year (~5hours)
    # divided into 3 minute intervals

    if (night.streak == 100) {
      dusk <- c(dusk, i - 100)
    } else if (day.streak == 100 & i != 100) {
      dawn <- c(dawn, i - 100)
    }
  }

我也尝试过对它进行区分,但结果却很时髦......

出现的主要问题是测量标准杆的仪器可能不准确(哇喔!),因此最小值有时可能与基线相差+/- 0.1。它有时也应该读为0(不能在第7个图中看到)

可能有用的一件事是,一旦你能找到1个正确的黎明和1个正确的黄昏文件,你知道每个其他文件应该是+/- 24小时的时间。

这是我第一次在stackoverflow上发帖,我花了几个小时查看与此主题相关的每个帖子都无济于事。我希望有人可以帮助我推动正确的方向。提前谢谢!

0 个答案:

没有答案