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

如何用dplyr筛选仅在最后日期所有X字段非零的用户?

解决方案

我们可以通过以下步骤用dplyr实现需求:

  1. 规范日期格式,避免字符串比较的误差;
  2. 定位全局最后可用日期;
  3. 筛选该日期下所有X字段均非零的用户;
  4. 按需提取这些用户的完整数据。

代码实现

library(dplyr)
library(lubridate) # 用于处理日期格式

# 构造示例数据
df <- tibble(
  date = c("1/1", "2/1", "3/1", "4/1", "1/1", "2/1", "3/1", "4/1"),
  user = c(1, 1, 1, 1, 2, 2, 2, 2),
  X1 = c(0, 0, 0, 25, 285, 0, 0, 0),
  X2 = c(3, 7, 0, 4, 0, 0, 54, 0),
  X3 = c(34, 65, 0, 65, 0, 0, 0, 0)
)

# 转换为标准日期格式,确保max()能正确识别最后日期
df <- df %>% mutate(date = dmy(date))

# 获取全局最后日期
last_date <- max(df$date)

# 提取符合条件的用户ID
valid_users <- df %>%
  filter(date == last_date) %>% # 仅保留最后日期的记录
  filter(X1 != 0, X2 != 0, X3 != 0) %>% # 筛选所有X字段非零的行
  pull(user) # 提取用户ID

# 如需获取这些用户的完整数据
valid_user_data <- df %>% filter(user %in% valid_users)

代码说明

  • 使用lubridate::dmy()将字符串日期转为标准日期对象,避免字符串排序导致的最后日期识别错误;
  • 先筛选出最后日期的所有记录,再从中过滤出X1、X2、X3均不为0的用户;
  • 通过pull(user)提取符合条件的用户ID,后续可根据需要筛选这些用户的全部数据。

运行后,valid_users会得到[1] 1,即仅用户1符合要求,用户2因最后日期的所有X字段均为0被排除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:35:21