r - 在 r 中使用 dplyr groupwise 替换列中的多个特定行
问题描述
以下是我的InputDataSet
数据集 -
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
在 column 中第三个元素之后的每个组中speed
,我想从它的速度值中减去 5 并在该列中替换。如何使用 dplyr 做到这一点?
这是我尝试过的,总是出错,在这里找不到使用replace()
函数的方法。
InputDataSet <- InputDataSet %>% group_by(Group) %>% mutate(
Speed[-c(1:3)] = Speed[-c(1:3)] - 5)
上述方法适用于向量,但是当我尝试dplyr
在列中使用它时,它给了我 -
Error: unexpected '=' in:
"
Speed[-c(1:3)] ="
解决方案
这是dplyr
通过row_number
s的一种方法:
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
数据:
set.seed(123)
df <- data.frame(
Group = c(rep(1,10), rep(2,10)),
Speed = rnorm(20, 10)
)
推荐阅读
- windows - 在 Windows 中运行 Avahi Docker linux 容器
- html - 我制作了一个有 2 列的响应式网格,但高度不会在同一个位置结束,有一点差距
- javascript - 如何根据另一个复选框选择取消选中复选框?
- git - 我可以使用 GIT Bash 一次在我的所有 repos 上检查一个特定的分支吗?
- asp.net - 我应该使用视图模型吗?ASP.NET MVC
- html - 如何在 HTML 中强加一个空格
- java - 如何在没有任何 XML 且没有特定于 Spring 的注释的情况下将 JSR 330 与 Spring 作为实现一起使用?
- python - 如何根据列比较Python填充缺失值
- javascript - 使材质选项卡可滚动
- python - TypeError:__init__() 为参数“索引”获取了多个值