R中如何将tibble的天数字段自动重编码为学习周变量
实现方法
你可以通过整数除法逻辑实现需求,无需编写长段case_when(),可自动适配后续新增的任意天数数据,两种常用实现方式如下:
tidyverse 实现
library(tidyverse) # 构造示例数据 tb <- tibble(subject = rep(c("a", "b", "c"), each = 20), days = rep(-2:17, 3)) # 生成study_week字段 tb <- tb %>% mutate(study_week = if_else(days < 0, -1L, (days %/% 7) + 1L))
基础R实现
tb$study_week <- ifelse(tb$days < 0, -1L, (tb$days %/% 7) + 1L)
逻辑说明
- 先做分支判断:所有小于0的
days统一赋值为-1 - 大于等于0的天数使用R的整数除法运算符
%/%计算除以7的商,再加1即可得到对应周数:- 0~6天除以7的商为0,加1得到第1周
- 7~13天除以7的商为1,加1得到第2周
- 后续新增的更大天数会自动按7天为周期递推周数,无需手动修改规则
验证输出
打印前10行结果和需求的预期输出完全一致:
# A tibble: 60 × 3 subject days study_week <chr> <int> <int> 1 a -2 -1 2 a -1 -1 3 a 0 1 4 a 1 1 5 a 2 1 6 a 3 1 7 a 4 1 8 a 5 1 9 a 6 1 10 a 7 2 # ℹ 50 more rows
内容的提问来源于stack exchange,提问作者persephone
相关产品推荐
相关产品推荐

