簡體   English   中英

R日期順序-不按天增加,而是按行/觀察數增加

[英]R date sequence - increase not by days but by row/observation

我正在嘗試從數據框中選擇一個日期范圍(后來也由所述數據框中的參與者)。 通常,如果要例如將日期范圍增加幾天,這相對容易。

我的問題是我不想按天增加,而是按行查看何時進行100次觀察。 我想問題是我的數據幀中沒有連續的天,否則我只能做min(as.Date(data$date) + days(100)

我也嘗試了seq.Date(min(as.Date(data$date), length.out = 100, by = 1))但這也不起作用。

以下是一些示例數據:

dates <- data.frame(date = c("2015-01-08", "2015-01-05", "2015-01-05", 
"2014-12-22", "2014-11-08", "2014-11-01", "2014-10-24", "2014-10-24", 
"2014-10-18", "2014-09-26", "2014-09-21", "2014-09-19", "2014-08-14", 
"2014-08-08", "2014-08-08", "2014-07-10", "2014-07-10", "2014-06-23", 
"2014-06-20", "2014-06-13", "2014-06-11", "2014-06-07", "2014-06-03", 
"2014-06-02", "2014-05-23", "2014-05-16", "2014-05-02", "2014-04-25",
"2014-04-11", "2014-04-09", "2014-04-01", "2014-03-27", "2014-03-25",
"2014-03-20", "2014-03-14", "2014-03-06", "2014-03-01"))

現在,當我運行: seq.Date(min(as.Date(dates$date)), length.out = 20, by = 1) ,我得到了二十個日期:

[1] "2014-03-01" "2014-03-02" "2014-03-03" "2014-03-04" "2014-03-05" "2014-
03-06" "2014-03-07"
[8] "2014-03-08" "2014-03-09" "2014-03-10" "2014-03-11" "2014-03-12" "2014-
03-13" "2014-03-14"
[15] "2014-03-15" "2014-03-16" "2014-03-17" "2014-03-18" "2014-03-19" "2014-
03-20"

但是:這些是連續的日期,與數據框中的日期不匹配,因此我無法告訴您從最低/最早的日期開始進行100次觀察的時間。

任何幫助將不勝感激! 我確定我不是唯一一個遇到此問題的人……雖然在這里找不到任何東西。

您可以使用以下內容:

N = 20 # set N to be find difference between 1st and Nth time period
diff(sort(as.Date(dates$date))[c(1,N)])
# Time difference of 114 days

分解如下:1) sort(as.Date(dates$date))將字符向量轉換為日期類型,並以升序排列。 2) [c(1,N)]個子集可以找到最早的(第一個)日期,然后是第N個。 3) diff()計算兩個日期之間的差。

感謝@dww的幫助,我能夠構造以下函數,該函數很漂亮(可以隨意使用):

    time_to_100 <- function(dataframe){

    N = 100 # set number of observations you want to 'check'

    output <- vector("double", length(levels(dataframe$part_id))) 
    # output vector based on number of indiv. part_ids (part_id = factor)

    for(part in dataframe$part_id){
       output[[part]] <-
    as.numeric(diff(sort(as.Date(dataframe[dataframe$part_id == 
    part,]$created))[c(1,N)]), units = "days") # created = the date column
    }

    return(output)
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM