Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SECR场合栏via R:如何为序列中的每个日期指定一个数字,但如果某个日期不是';你不在那个专栏里吗?_R_Date - Fatal编程技术网

SECR场合栏via R:如何为序列中的每个日期指定一个数字,但如果某个日期不是';你不在那个专栏里吗?

SECR场合栏via R:如何为序列中的每个日期指定一个数字,但如果某个日期不是';你不在那个专栏里吗?,r,date,R,Date,我正在尝试为空间显式捕获-再捕获模型(secr)格式化数据,我们需要一个专栏。我每年都要对整个数据集进行90天的记录,每一行都是一个单独的动物记录,记录在一个摄像机陷阱上。假设第一天是2019年2月1日。在“场合”栏中,它应该得到“1”。最后一天,5月1日,应该在该栏中得到“90” 然而,这里有一个陷阱:在那个时间段的每个日期都没有一个捕获,有些日子有多个捕获。因此,“dt”列中的日期可能如下所示: for (m in mydateseq) { data_new = da

我正在尝试为空间显式捕获-再捕获模型(secr)格式化数据,我们需要一个专栏。我每年都要对整个数据集进行90天的记录,每一行都是一个单独的动物记录,记录在一个摄像机陷阱上。假设第一天是2019年2月1日。在“场合”栏中,它应该得到“1”。最后一天,5月1日,应该在该栏中得到“90”

然而,这里有一个陷阱:在那个时间段的每个日期都没有一个捕获,有些日子有多个捕获。因此,“dt”列中的日期可能如下所示:


    for (m in mydateseq) {
       data_new = data_old %>% 
          arrange(dt) %>% 
          mutate(occasion = if_else(dt %in% mydate, 
                                    true = mydateseq[m], 
                                    false = NA_real_)
    }

  • 2019-02-01
  • 2019-02-04
  • 2019-02-05
  • 2019-02-06
  • 2019-02-07
  • 2019-02-07
  • 2019-02-07
  • 我想创建一个“场合”列,以便我的最终表格可以有如下列:

    
        for (m in mydateseq) {
           data_new = data_old %>% 
              arrange(dt) %>% 
              mutate(occasion = if_else(dt %in% mydate, 
                                        true = mydateseq[m], 
                                        false = NA_real_)
        }
    
    
  • 2019-02-01 | 1
  • 2019-02-04 | 4
  • 2019-02-05 | 5
  • 2019-02-06 | 6
  • 2019-02-07 | 7
  • 2019-02-07 | 7
  • 2019-02-07 | 7
  • 关于这一点,我已经采取了两种方法,但都没有成功。首先,我试过:

    
        data_new = data_old %>% 
                   arrange(dt) %>% 
                   mutate(occasion = as.numeric(factor(dt))
    
    
    这让我的桌子看起来像这样:

    
        for (m in mydateseq) {
           data_new = data_old %>% 
              arrange(dt) %>% 
              mutate(occasion = if_else(dt %in% mydate, 
                                        true = mydateseq[m], 
                                        false = NA_real_)
        }
    
    
  • 2019-02-01 | 1
  • 2019-02-04 | 2
  • 2019-02-05 | 3
  • 2019-02-06 | 4
  • 2019-02-07 | 5
  • 2019-02-07 | 5
  • 2019-02-07 | 5
  • 所以,相同日期的数字是相同的,这正是我想要的,但如果缺少相应的日期,它不会跳过数字。我尝试了更复杂的方法:

    首先,我得到了每年90天的开始日期

    
        mydttemp <- as.POSIXct("2014-02-01")
        mydates = seq.POSIXt(from = mydttemp, length.out = 7, by = "1 year")
    
    
    `

    第二,我为每年制定了90天的期限。我使用循环和列表中每年经过的对象文件号(因此,使用
    mydates[fileNumber]
    表达式)

    最后,我将这些输入到代码的同一部分中,如下所示:

    
        for (m in mydateseq) {
           data_new = data_old %>% 
              arrange(dt) %>% 
              mutate(occasion = if_else(dt %in% mydate, 
                                        true = mydateseq[m], 
                                        false = NA_real_)
        }
    
    
    其想法是,如果在创建的列表中找到与“dt”列中的任何日期匹配的日期,它会将该日期的相应数字放入一列中。但这给了我一个充满NAs的专栏。有什么想法吗


    提前谢谢。

    从日期中减去第一个日期,再加上1:

    # test data
    s <- c("2019-02-01", "2019-02-04", "2019-02-05", "2019-02-06", 
       "2019-02-07", "2019-02-07", "2019-02-07")
    
    d <- as.Date(s)
    as.integer(d - d[1] + 1L)
    ## [1] 1 4 5 6 7 7 7
    
    测试数据
    嗨,很遗憾,我相信这只解决了示例中的问题,而不是整个问题。