gpt4 book ai didi

r - 根据条件合并/加入数据框/表 -> 或 <

转载 作者:行者123 更新时间:2023-12-04 20:35:31 25 4
gpt4 key购买 nike

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

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

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

因此,在下面的示例中,我想按 201401 至 201404 周过滤部分 A,按 201551 至 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))

最佳答案

最新development versiondata.table添加非对等连接(在较旧的连接中,您可以使用 foverlaps ):

setDT(df) # convert to data.table in place
setDT(Weeks_Filter)

# fix the column types - you have factors currently, converting to integer
df[, Week := as.integer(as.character(Week))]
Weeks_Filter[, `:=`(Start = as.integer(as.character(Start)),
End = as.integer(as.character(End)))]

# the actual magic
df[df[Weeks_Filter, on = .(Section, Week >= Start, Week <= End), which = T]]
# Week Section
#1: 201401 A
#2: 201402 A
#3: 201403 A
#4: 201404 A
#5: 201552 B
#6: 201601 B
#7: 201602 B
#8: 201603 B

关于r - 根据条件合并/加入数据框/表 -> 或 <,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36502149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com