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

如何在R中为每个用户标记Workplace与First_Workplace不等的日期

问题描述

我的数据集包含以下变量:
UserID | Date | Workplace | First_Workplace
用户被分配到Remote(远程)或Office(办公室)办公地点。我需要找出每个用户第一次出现Workplace不等于First_Workplace的时间,并将该时间添加到名为Date_Changed的新列中。我写出了如下伪代码,但不知道如何在R中实现:

data %>%
  mutate(data, Date_Changed = Date WHEN Workplace != First_Workplace FOR EACH UserID)
R语言实现方案

使用dplyr包可以轻松实现需求,核心思路是按用户分组后,找到每个用户首次出现办公地点变更的日期,并填充到对应组的所有行中。

基础实现代码

library(dplyr)

# 按用户分组,计算变更日期
data <- data %>%
  group_by(UserID) %>%
  mutate(
    Date_Changed = ifelse(
      # 判断该用户是否存在办公地点变更的记录
      any(Workplace != First_Workplace),
      # 取第一次变更的日期(需确保数据已按日期排序)
      first(Date[Workplace != First_Workplace]),
      # 无变更则填NA
      NA
    )
  ) %>%
  ungroup()

确保日期顺序的优化版本

如果你的数据集没有按Date排序,建议先按用户和日期排序,避免取到错误的变更日期:

data <- data %>%
  # 先按用户、日期排序
  arrange(UserID, Date) %>%
  group_by(UserID) %>%
  mutate(
    Date_Changed = ifelse(
      any(Workplace != First_Workplace),
      first(Date[Workplace != First_Workplace]),
      NA
    )
  ) %>%
  ungroup()

逻辑说明

  • group_by(UserID):将数据按用户分组,保证每个用户的计算独立进行
  • any(Workplace != First_Workplace):检查该用户是否有办公地点变更的记录
  • first(Date[Workplace != First_Workplace]):筛选出该用户所有变更记录,取其中最早的日期(排序后first()对应最早的日期)
  • 无变更记录的用户,Date_Changed列填充NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:35:44