簡體   English   中英

如何合並兩個時間序列以產生僅包含較小日期(R)中的日期的對象?

[英]How do I merge two time series to result in an object with only the dates from the smaller one (R)?

我有兩個每日時間序列,范圍從2016年1月1日到2016年8月1日,但是我的一個序列僅包含工作日(即,不包括周末和銀行假日)的數據,另一個包含每天的數據。 我的問題是,如何合並兩個系列,以便在兩個時間序列中只剩下營業日數據(從第二個時間序列中刪除多余的日期)

這個問題也用data.table標記,所以我猜這兩個時間序列存儲為data.frames或data.tables。

默認情況下, data.table中的聯接右聯接 因此,如果您提前知道“較短”時間序列中的哪個序列,則可以編寫:

library(data.table)
dt_long[dt_short, on = "date"]
#         date weekday i.weekday
#1: 2017-03-30       4         4
#2: 2017-03-31       5         5
#3: 2017-04-03       1         1
#4: 2017-04-04       2         2
#5: 2017-04-05       3         3
#6: 2017-04-06       4         4

如果不確定哪個“較短”時間序列是可以使用內部聯接

dt_short[dt_long, on = "date", nomatch = 0]

nomatch = 0指定內部nomatch = 0

如果您的時間序列還不是data.tables作為此處的樣本數據,而是存儲為data.frames,則需要通過以下方式將它們強制轉換為data.table類:

setDT(dt_long)
setDT(dt_short)

數據

由於OP沒有提供任何可復制的數據,因此我們需要自行准備示例數據(類似於此答案,但作為data.table ):

library(data.table)
dt_long <- data.table(date = as.Date("2017-03-30") + 0:7)
# add payload: integer weekday according ISO (week starts on Monday == 1L)
dt_long[, weekday := as.integer(format(date, "%u"))]
# remove weekends
dt_short <- dt_long[weekday < 6L]

我們有兩個包含周末的data.frame df_long和不包含周末的df_short

Date <- as.Date(seq(as.Date("2003-03-03"), as.Date("2003-03-17"), by = 1), format="%Y-%m-%d")
weekday <- weekdays(as.Date(Date))

df_long <- data.frame(Date, weekday)
df_short<- df_long[ c(1:5, 8:12, 15), ]

您可以使用加入他們dplyr::inner_join從刪除周末和節假日df_long並只保留工作日。

library(dplyr)
df_join <- df_long %>% inner_join(., df_short, by ="Date")

> df_join
         Date weekday.x weekday.y
1  2003-03-03    Monday    Monday
2  2003-03-04   Tuesday   Tuesday
3  2003-03-05 Wednesday Wednesday
4  2003-03-06  Thursday  Thursday
5  2003-03-07    Friday    Friday
6  2003-03-10    Monday    Monday
7  2003-03-11   Tuesday   Tuesday
8  2003-03-12 Wednesday Wednesday
9  2003-03-13  Thursday  Thursday
10 2003-03-14    Friday    Friday
11 2003-03-17    Monday    Monday

暫無
暫無

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

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