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

基于日期范围按唯一用户ID计算R中变量的条件求和

解决方案

这里给你两种适合新手的实现方式,都能完成需求:

方法一:用Base R实现

  1. 先把两个数据框按dash_ID合并,让每条收听记录对应上用户的里程碑日期:
merged_df <- merge(DF1, DF2, by = "dash_ID")
  1. 筛选出符合日期范围的记录:date在Intervention.End.Date之后、Follow.up.End.Date及之前
filtered_df <- subset(merged_df, date >= Intervention.End.Date & date <= Follow.up.End.Date)
  1. 按dash_ID分组,计算每个用户的总收听时长:
total_time <- aggregate(time_elapsed_min ~ dash_ID, data = filtered_df, sum)
  1. 把求和结果合并回原DF2,无符合条件记录的用户自动填充0:
DF2$total_listen_time <- merge(DF2, total_time, by = "dash_ID", all.x = TRUE)$time_elapsed_min
DF2$total_listen_time <- replace(DF2$total_listen_time, is.na(DF2$total_listen_time), 0)

方法二:用tidyverse工具包(更直观,适合新手)

如果还没安装tidyverse,先完成安装加载:

install.packages("tidyverse")
library(tidyverse)

然后按流程操作:

  1. 关联两个数据框,筛选日期范围后分组求和:
total_time_df <- DF1 %>%
  left_join(DF2, by = "dash_ID") %>%
  filter(date >= Intervention.End.Date, date <= Follow.up.End.Date) %>%
  group_by(dash_ID) %>%
  summarise(total_listen_time = sum(time_elapsed_min, na.rm = TRUE))
  1. 把求和结果合并回DF2,缺省值补0:
DF2 <- DF2 %>%
  left_join(total_time_df, by = "dash_ID") %>%
  mutate(total_listen_time = replace_na(total_listen_time, 0))

注意点

  • 你已经把所有日期转成Date类,直接用>=和<=做日期比较是完全可行的
  • 两种方法都会把无有效收听记录的用户总时长设为0,符合常规统计逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:39:57