使用dplyr为列值添加抖动

4

I have a data frame of the following format.

   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个回答

4

计算一个案例的抖动并将差异添加到所有案例中:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接