AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 77605623
Accepted
Basil
Basil
Asked: 2023-12-05 18:53:06 +0800 CST2023-12-05 18:53:06 +0800 CST 2023-12-05 18:53:06 +0800 CST

R 中的时间连接

  • 772

我有两个表称为dates和items:

#dates table
from <- c(as.Date("2022/1/1"), as.Date("2022/3/1"), as.Date("2022/5/1"))
to <- c(as.Date("2022/1/25"), as.Date("2022/3/17"), as.Date("2022/5/30"))
id <- c(1,1,2)
dates <- data.frame(from, to, id)

#items table
item_id <- c(1, 1, 2)
date <- c(as.Date("2022/1/5"), as.Date("2022/3/4"), as.Date("2022/1/4"))
items <-data.frame(item_id, date)

#end result
from <- c(as.Date("2022/1/1"), as.Date("2022/3/1"), NA)
to <- c(as.Date("2022/1/25"), as.Date("2022/3/17"), NA)

end_result <- data.frame(item_id, date, from, to) 

dfdates需要连接到itemsdf,其中 id 匹配,并且 df 的日期items位于 df 的起始日期和终止日期之间dates。数据end_result框显示了预期的结果。

有人对如何实现这一目标有任何建议吗?

  • 2 2 个回答
  • 76 Views

2 个回答

  • Voted
  1. Best Answer
    G. Grothendieck
    2023-12-05T22:18:30+08:002023-12-05T22:18:30+08:00

    1) sqldf使用指定的连接条件将项目左连接到日期。from 和 to 是 SQL 保留字,因此请将它们放在方括号中。

    library(sqldf)
    
    result <- sqldf("select items.item_id, items.date, dates.[from], dates.[to]
      from items left join dates on dates.id = items.item_id and
        items.date between dates.[from] and dates.[to]")
    
    # check
    identical(result, end_result)
    ## [1] TRUE
    

    2) dplyr 其工作原理相同。

    library(dplyr)
    
    result2 <- items %>%
      left_join(dates, join_by(item_id == id, between(date, from, to)))
    
    # check
    identical(result2, end_result)
    ## [1] TRUE
    
    • 1
  2. Tobo
    2023-12-05T20:44:50+08:002023-12-05T20:44:50+08:00

    一个data.table办法:

    library(data.table)
    end_result <- as.data.table(items)[dates,
                                       on=.(item_id==id, date>=from, date<=to),
                                       `:=` (from=from, to=to)]
    

    上面分配给一个新表,但您可以通过就地end_result更新来避免制作整个数据的额外副本。items只需从 开始,setDT(items)[dates,而不是end_result <- as.data.table(items)[dates,.

    • 0

相关问题

  • 将复制活动的序列号添加到 Blob

  • Packer 动态源重复工件

  • 选择每组连续 1 的行

  • 图形 API 调用列表 subscribedSkus 状态权限不足,但已授予权限

  • 根据列值创建单独的 DF 的函数

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve