2015-04-03 78 views
-3

標準間隔這是我的頭(兩者)創建中的R

 start  end   omreg 
1 2011-01-19 2012-09-21  TRUE 
2 2012-01-19   <NA>  FALSE 
3 2007-09-01   <NA>  FALSE 
4 2011-09-01 2012-01-11  FALSE 
5 2008-09-01   <NA>  FALSE 
6 2013-09-01 2014-06-12  TRUE 

如所看到的,我有一個開始日期和結束日期。

這些數據適用於在特定日期和結束日期開始課程的學生顯示完成課程的時間。

每學期可持續160天。這意味着一個學期持續160天。 2個學期的320天,等...

的興趣在於閹學生通過課程後,160,320或480天,等...

我想,每學期創建列

其中: 傳遞=真 失敗=假

拿起160內天,我做誰混得學生:

gdk<-(difftime(as.Date(both$end), as.Date(both$start), 

units="days") < 160 & !both$omreg) 

但是後來我收到準備好的學生的問題

160到320天之間。

即< = 320但> 160天。

或許更容易在區間[160,320]天說...

這也許有點亂亂的解釋,但我盡我所能去試着解釋我的問題。

而我需要幫助的是如何更改上面的代碼,以便能夠挑選出所需的範圍。

回答

0

我試着理解你的問題,但是我不確定我是否完全理解它。你基本上有一個0到160,160和320等值的問題。

我想嘗試從both$endboth$start

之間的時間差,用160減去modulo操作的結果所以你必須在一個較低的天數,並且可以在這個值進行進一步的操作。

所以一步一步

假設你的數據是

start <- (c("2011-01-19","2012-01-19","2007-09-01","2011-09-01","2008-09-01","2013-09-01")) 
end <- (c("2012-09-21",NA,NA,"2012-01-11",NA,"2014-06-12")) 
omreg <- c("TRUE","FALSE","FALSE","FALSE","FALSE","TRUE") 
both <- data.frame(start,end,omreg) 

# calculate the time difference and convert it to an integer 
both$x <- as.integer(difftime(as.Date(both$end),as.Date(both$start), units=("days"))) 

# calculate the modulo 
both$y <- both$x%%160 

# subtract the module from the time difference so you get a value like 160, 320,.. 
both$diff <- both$x - both$y 

#remove useless columns 
both$x <- NULL 
both$y <- NULL 

所以你的結果會是這樣

 start  end omreg diff 
1 2011-01-19 2012-09-21 TRUE 480 
2 2012-01-19  <NA> FALSE NA 
3 2007-09-01  <NA> FALSE NA 
4 2011-09-01 2012-01-11 FALSE 0 
5 2008-09-01  <NA> FALSE NA 
6 2013-09-01 2014-06-12 TRUE 160