2016-12-24 70 views
5

考慮到這兩個時間向量:如何找到兩個時間向量的不同元素?

a<-seq(as.POSIXct("2010-01-01 05:00:00"), as.POSIXct("2010-01-02 23:55:00"), by = '5 min') 
b<-seq(as.POSIXct("2010-01-01 00:00:00"), as.POSIXct("2010-01-03 23:55:00"), by = '10 min') 

如何獲得這兩個向量之間的不同元素?我試過了:

union(setdiff(a, b), setdiff(b, a)) 

但是返回的值不是時間格式。

+4

'as.POSIXct(工會(setdiff(A,B) ,setdiff(b,a)),origin =「1970-01-01」) '會返回一個時間格式.. – Haboryme

+0

它可以工作,但是'origin =「1970-01-01」'是什麼意思? –

+0

這是時間格式的默認原點。 – Haboryme

回答

5

這僅使用保留"POSIXct"類操作:

c(a[!a %in% b], b[!b %in% a]) 
3

這也將工作(使用默認原點):

as.POSIXct(union(setdiff(a, b), setdiff(b, a)), origin = '1970-01-01') 

#[1] "2010-01-01 05:05:00 IST" "2010-01-01 05:15:00 IST" "2010-01-01 05:25:00 IST" "2010-01-01 05:35:00 IST" "2010-01-01 05:45:00 IST" 
#[6] "2010-01-01 05:55:00 IST" "2010-01-01 06:05:00 IST" "2010-01-01 06:15:00 IST" "2010-01-01 06:25:00 IST" "2010-01-01 06:35:00 IST" 

# this checks a U b = (a - b) U (b - a) U (a /\ b) for PoSIxct objects, should evaluate to true 
all(sort(as.POSIXct(union(union(setdiff(a, b), setdiff(b, a)), intersect(a, b)), origin = '1970-01-01')) == sort(as.POSIXct(union(a, b), origin = '1970-01-01'))) 
# TRUE 
+0

我喜歡你的答案,因爲你很棒!我向你學習,你搖滾! – nik

相關問題