Добавьте джиттер к значению столбца, используя dplyr

У меня есть фрейм данных следующего формата.

   author year stages
1  A 1150      1
2  B 1200      1
3  C 1200      1
4  D 1300      1
5  D 1300      1
6  E 1390      3
7  F 1392      3
8  G 1400      3
9  G 1400      3
...

Я хочу, чтобы джиттер каждый год и автор сочетали небольшую сумму. Я хочу, чтобы документы разных авторов в одном и том же году искажались уникальными ценностями. Например, токены от авторов B и C появляются в одном и том же году, но их следует сбивать разными суммами. Все токены от одного и того же автора, например, два токена от автора G в 1400, должны быть сброшены на одну и ту же сумму.

Я пробовал следующее, но получаю уникальное количество дрожания для каждой строки.

data %>% group_by(author) %>% mutate(year = jitter(year, amount=.5))

Вывод этого кода следующий.

   author     year stages
1  A 1150.400      1
2  B 1200.189      1
3  C 1200.222      1
4  D 1300.263      1
5  D 1299.788      1
6  E 1390.045      3
7  F 1391.964      3
8  G 1399.982      3
9  G 1399.783      3

Однако мне хотелось бы, чтобы оба токена от автора G были сдвинуты на одинаковую величину. Принципиальное отличие состоит в том, что для автора G все токены сдвинуты на одну и ту же величину.

   author     year stages
1  A 1150.400      1
2  B 1200.189      1
3  C 1200.222      1
4  D 1300.263      1
5  D 1299.788      1
6  E 1390.045      3
7  F 1391.964      3
8  G 1399.982      3
9  G 1399.982      3

1 ответ

Решение

Рассчитайте джиттер для одного случая и добавьте разницу для всех случаев:

dat %>% 
  group_by(author) %>% 
  mutate(year = year + (year[1] - jitter(year[1], amount=.5)))

#  author     year stages
#1      A 1149.720      1
#2      B 1200.385      1
#3      C 1199.888      1
#4      D 1299.589      1
#5      D 1299.589      1
#6      E 1389.866      3
#7      F 1392.225      3
#8      G 1400.147      3
#9      G 1400.147      3
Другие вопросы по тегам