Добавьте джиттер к значению столбца, используя 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