You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言dplyr中使用join_by进行条件连接失败问题求助

解决办法

1. 先转换日期格式

你用read.csv读取的service_date、start、end都是字符串类型,between()函数无法识别字符串格式的日期范围,必须先把它们转成Date类型才能正常判断。

2. 条件连接后聚合时长

匹配对应时段的服务记录后,一个时段会对应多条服务数据,需要按每个时段(id+start+end)分组,把服务时长汇总求和。

完整可运行代码:

library(tidyverse)

# 读取数据并转换日期格式
services <- read.csv("https://www.dropbox.com/scl/fi/04br87qn2wmpmoyaz95ri/services.csv?rlkey=vm7ib1xqne1ceawjnsmzeolf5&dl=1") %>%
  mutate(service_date = as.Date(service_date))

periods <- read.csv("https://www.dropbox.com/scl/fi/fow33g4ddroinspyi4xy8/periods.csv?rlkey=v9cr0thuh6pm0rc7qrhommkpe&dl=1") %>%
  mutate(start = as.Date(start),
         end = as.Date(end))

# 执行条件连接并计算时段内总服务时长
result <- periods %>%
  left_join(services, by = join_by(id, between(service_date, start, end))) %>%
  group_by(id, start, end) %>%
  summarize(total_service_duration = sum(service_duration, na.rm = TRUE), .groups = "drop")

print(result)

原代码报错的原因

  • 核心问题是日期格式错误:字符串类型的日期无法被between()正确解析,导致条件连接逻辑失效。
  • 就算不报错,直接连接会产生多对多匹配结果(一个时段对应多条服务记录),无法直接得到你需要的“时段内总时长”,必须通过分组聚合完成汇总。

内容的提问来源于stack exchange,提问作者st4co4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 00:22:31