R:从每组的第一行中减去行

rem*_*emo 1 r subtraction dplyr

我想从每个组的第一行中减去距离列的每一行。

我的数据如下:

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))
Run Code Online (Sandbox Code Playgroud)

我尝试过以下代码:

Data <- Data %>%
  group_by(Group) %>%
  mutate(Difference=Distance - dplyr:: lag(Distance))

Run Code Online (Sandbox Code Playgroud)

但是,如何调整代码,以便对于每个组,从每个组的第一行中的值中减去“距离”列中的值?因此,对于第 1 组,这意味着从 0.05 中减去 0.084、0.06、0.03 和 0.034 的值。

Tar*_*Jae 5

更新:查看评论: 非常感谢@Gregor Thomas:

library(dplyr)
Data %>% 
  group_by(Group) %>% 
  mutate(Distance = Distance - Distance[1])
Run Code Online (Sandbox Code Playgroud)

好吧,现在我也看到了。这与 Gregor Thomas 在评论中提供的解决方案相同dplyr

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
Run Code Online (Sandbox Code Playgroud)

第一个答案: 这是另一种dplyr选择:

library(dplyr)
Data %>% 
  group_by(Group) %>% 
  mutate(Distance = Distance - Distance[row_number() == 1])
Run Code Online (Sandbox Code Playgroud)
   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
Run Code Online (Sandbox Code Playgroud)

  • `[row_number() == 1]` 看起来写起来很长 `[1]` ;) (3认同)