I would like to subtract each rows from the first row in each Group for the column Distance.
My data is the following:
structure(list(Group = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
2L, 3L, 3L, 3L, 3L, 3L), Distance = c(0.05, 0.084, 0.06, 0.03,
0.034, 0.0534, 0.034, 0.23, 0.34, 0.6435, 0.6346, 0.234, 0.246,
0.4, 0.7)), class = "data.frame", row.names = c(NA, -15L))
I have tried the following code:
Data <- Data %>%
group_by(Group) %>%
mutate(Difference=Distance - dplyr:: lag(Distance))
However, how can I adjust the code so that for each Group the value in column Distance is subtracted from the value in the first row for each group? So for group 1 it would mean that the values 0.084, 0.06, 0.03 and 0.034 are all subtracted from 0.05.
Update: see comments: Many thanks to @Gregor Thomas:
library(dplyr)
Data %>%
group_by(Group) %>%
mutate(Distance = Distance - Distance[1])
Ok now I see it also. It is the same solution as Gregor Thomas provided in the comments just in dplyr
way!
Group Distance
<int> <dbl>
1 1 0
2 1 0.034
3 1 0.0100
4 1 -0.02
5 1 -0.016
6 2 0
7 2 -0.0194
8 2 0.177
9 2 0.287
10 2 0.590
11 3 0
12 3 -0.401
13 3 -0.389
14 3 -0.235
15 3 0.0654
First answer:
Here is another dplyr
option:
library(dplyr)
Data %>%
group_by(Group) %>%
mutate(Distance = Distance - Distance[row_number() == 1])
Group Distance
<int> <dbl>
1 1 0
2 1 0.034
3 1 0.0100
4 1 -0.02
5 1 -0.016
6 2 0
7 2 -0.0194
8 2 0.177
9 2 0.287
10 2 0.590
11 3 0
12 3 -0.401
13 3 -0.389
14 3 -0.235
15 3 0.0654