根据标准合并/加入数据框/表 - >或<

Mid*_*eek 5 merge r dataframe data.table

我有一个包含每周数据的数据框.每个部分有大约104周的数据,总共有83个部分.

我有第二个数据框,其中包含按部分的开始和结束周,我想过滤主数据框.

在两个表中,周是年和周的组合,例如201501,并且总是从第1周到第52周.

因此,在下面的示例中,我想在201401年到201404年之间过滤A部分,在2015年到201603周之间过滤B部分.

我最初认为我可以在我的Weeks_Filter数据框中添加一个额外的列,该数据框是每个部分的周开始和结束的序号(每周重复每行),然后合并2个表并保留所有数据来自Weeks_Filter表(all.y = TRUE),因为这对我做的一小部分样本起作用,但我不知道如何添加连续周,因为它们可以跨越不同年份.

Week <- c("201401","201402","201403","201404","201405", "201451", "201552", "201601", "201602", "201603")
Section <- c(rep("A",5),rep("B",5))
df <- data.frame(cbind(Week, Section))

Section <- c("A", "B")
Start <- c("201401","201551")
End <- c("201404","201603")
Weeks_Filter <- data.frame(cbind(Section, Start, End))
Run Code Online (Sandbox Code Playgroud)

The*_*aya -2

require(data.table)

df <- merge(df, Weeks_Filter)
df[, -1] <- apply(df[, -1], 2, function(x) as.numeric(as.character(x)))
df <- data.table(df)

df[Week >= Start & Week <= End, .SD, by = Section]
Run Code Online (Sandbox Code Playgroud)

输出是,

   Section  Start    End   Week
1:       A 201401 201404 201401
2:       A 201401 201404 201402
3:       A 201401 201404 201403
4:       A 201401 201404 201404
5:       B 201551 201603 201552
6:       B 201551 201603 201601
7:       B 201551 201603 201602
8:       B 201551 201603 201603
Run Code Online (Sandbox Code Playgroud)