使用 dplyr 将抖动添加到列值
Add jitter to column value using 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
计算一种情况的抖动并将差异添加到所有情况:
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
我有以下格式的数据框。
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
计算一种情况的抖动并将差异添加到所有情况:
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