R перекодировка дней с начала учебной недели

#r

Вопрос:

Предположим, у меня есть следующее tibble :

  tb lt;- tibble(subject = rep(c("a", "b", "c"), each = 20), days = rep(-2:17, 3))  # A tibble: 60 x 2  subject days  lt;chrgt; lt;intgt;  1 a -2  2 a -1  3 a 0  4 a 1  5 a 2  6 a 3  7 a 4  8 a 5  9 a 6 10 a 7  

Теперь я хочу создать переменную, которая преобразует переменную дня в переменную, содержащую учебную неделю.

Тем не менее, я хочу избежать, конечно, делать это «вручную» в большом case_when() заявлении, так как время от времени поступает больше данных. Начиная с 0-го дня, я хочу, чтобы значение этой переменной увеличивалось на 1 каждые 7 дней. Все, что ниже 0, получает a — 1 (здесь не важно считать недели).

Примерный результат:

 # A tibble: 60 x 2  subject days study_week  lt;chrgt; lt;intgt; lt;intgt;  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   

Комментарии:

1. Вы считаете неделю от 0 до 6 или 1 до 7 ?

2. от 0 до 6, но я думаю, что решение будет аналогичным при подсчете от 1 до 7.

Ответ №1:

 library(tidyverse) tb %gt;%  mutate(study_week = ifelse(days lt; 0, -1, floor(days / 7)   1))   # lt;chrgt; lt;intgt; lt;dblgt; # 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  

Комментарии:

1. да, теперь я чувствую себя неловко, потому что все так просто.