如何在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
相关产品推荐
相关产品推荐

