在r中使用dplyr groupwise替换列中的多个特定行

在r中使用dplyr groupwise替换列中的多个特定行,r,dplyr,R,Dplyr,下面是我的InputDataSetdataset- Group Time Speed 1 5 25 # Ignore first 3 elements 1 10 23 # Ignore first 3 elements 1 15 21 # Ignore first 3 elements 1 20 33 # Speed - 5 1 25 40 # Speed - 5 1

下面是我的
InputDataSet
dataset-

Group   Time    Speed
1       5       25 # Ignore first 3 elements
1       10      23 # Ignore first 3 elements
1       15      21 # Ignore first 3 elements
1       20      33 # Speed - 5 
1       25      40 # Speed - 5
1       30      42 # Speed - 5
1       35      52 # Speed - 5
1       40      48 # Speed - 5
1       45      52 # Speed - 5
2       5       48 # Ignore first 3 elements
2       10      42 # Ignore first 3 elements
2       15      39 # Ignore first 3 elements
2       20      36 # Speed - 5
2       25      38 # Speed - 5
2       30      46 # Speed - 5
2       35      53 # Speed - 5
3       5       45 # Speed - 5
3       10      58 # Speed - 5

速度
列第3个元素之后的每组中,我想从其速度值中减去5,并在该列中替换。我如何使用dplyr实现这一点

这是我尝试过的,并且总是出现错误,在这里找不到使用
replace()
函数的方法

InputDataSet <- InputDataSet %>% group_by(Group) %>% mutate(
  Speed[-c(1:3)] = Speed[-c(1:3)] - 5)

以下是通过
row\u number
s的
dplyr
方法:

library(dplyr)
df %>%
  group_by(Group) %>%
  mutate(
    r_num = row_number(),
    Speed = ifelse(r_num %in% 1:3, Speed, Speed -5))
# A tibble: 20 x 3
# Groups:   Group [2]
   Group Speed r_num
   <dbl> <dbl> <int>
 1     1  9.44     1
 2     1  9.77     2
 3     1 11.6      3
 4     1  5.07     4
 5     1  5.13     5
 6     1  6.72     6
 7     1  5.46     7
 8     1  3.73     8
 9     1  4.31     9
10     1  4.55    10
11     2 11.2      1
12     2 10.4      2
13     2 10.4      3
14     2  5.11     4
15     2  4.44     5
16     2  6.79     6
17     2  5.50     7
18     2  3.03     8
19     2  5.70     9
20     2  4.53    10
库(dplyr)
df%>%
分组依据(分组)%>%
变异(
r_num=行数(),
速度=ifelse(r_num%in%1:3,速度,速度-5))
#一个tibble:20x3
#分组:分组[2]
组速度r_num
1     1  9.44     1
2     1  9.77     2
3     1 11.6      3
4     1  5.07     4
5     1  5.13     5
6     1  6.72     6
7     1  5.46     7
8     1  3.73     8
9     1  4.31     9
10     1  4.55    10
11     2 11.2      1
12     2 10.4      2
13     2 10.4      3
14     2  5.11     4
15     2  4.44     5
16     2  6.79     6
17     2  5.50     7
18     2  3.03     8
19     2  5.70     9
20     2  4.53    10
数据:

set.seed(123)

df这是一种通过
行数
s的
dplyr
方法:

library(dplyr)
df %>%
  group_by(Group) %>%
  mutate(
    r_num = row_number(),
    Speed = ifelse(r_num %in% 1:3, Speed, Speed -5))
# A tibble: 20 x 3
# Groups:   Group [2]
   Group Speed r_num
   <dbl> <dbl> <int>
 1     1  9.44     1
 2     1  9.77     2
 3     1 11.6      3
 4     1  5.07     4
 5     1  5.13     5
 6     1  6.72     6
 7     1  5.46     7
 8     1  3.73     8
 9     1  4.31     9
10     1  4.55    10
11     2 11.2      1
12     2 10.4      2
13     2 10.4      3
14     2  5.11     4
15     2  4.44     5
16     2  6.79     6
17     2  5.50     7
18     2  3.03     8
19     2  5.70     9
20     2  4.53    10
库(dplyr)
df%>%
分组依据(分组)%>%
变异(
r_num=行数(),
速度=ifelse(r_num%in%1:3,速度,速度-5))
#一个tibble:20x3
#分组:分组[2]
组速度r_num
1     1  9.44     1
2     1  9.77     2
3     1 11.6      3
4     1  5.07     4
5     1  5.13     5
6     1  6.72     6
7     1  5.46     7
8     1  3.73     8
9     1  4.31     9
10     1  4.55    10
11     2 11.2      1
12     2 10.4      2
13     2 10.4      3
14     2  5.11     4
15     2  4.44     5
16     2  6.79     6
17     2  5.50     7
18     2  3.03     8
19     2  5.70     9
20     2  4.53    10
数据:

set.seed(123)

df当

library(dplyr)
library(data.table)
df %>%
    mutate(Speed = rowid(Group) < 4 ~ Speed, TRUE ~ Speed - 5))
库(dplyr)
库(数据表)
df%>%
变异(速度=rowid(组)<4速度,真速度-5))

library(dplyr)
library(data.table)
df %>%
    mutate(Speed = rowid(Group) < 4 ~ Speed, TRUE ~ Speed - 5))
库(dplyr)
库(数据表)
df%>%
变异(速度=rowid(组)<4速度,真速度-5))

请查看已编辑的解决方案。我尝试了这个,它成功了!非常感谢您,使用
数据要容易得多。table
dply
中的要容易得多。请查看已编辑的解决方案。我尝试了这个,它成功了!非常感谢,使用
data.table比使用
dply要容易得多