我有一个类似于以下内容的数据集:
我想从星期一的相应值中减去所有星期二的值。因此,生成的第一列将为 Monday_1 - Tuesday_1,生成的第二列将为 Monday_2 - Tuesday_2,依此类推。
这是生成的数据框的样子。
我想保持星期一列的名称相同并选择星期二列。我的真实数据集比这要宽得多,因此不必手动减去要容易得多。理想情况下我想要一个dplyr解决方案。
数据:
df <- structure(list(id = 1:7, Monday_1 = c(4L, 11L, 18L, 6L, 20L,
5L, 12L), Monday_2 = c(20L, 3L, 20L, 12L, 1L, 10L, 15L), Monday_3 = c(14L,
20L, 8L, 17L, 4L, 2L, 3L), Monday_4 = c(13L, 8L, 11L, 3L, 12L,
14L, 17L), Tuesday_1 = c(1L, 14L, 7L, 16L, 2L, 6L, 12L), Tuesday_2 = c(10L,
8L, 1L, 16L, 10L, 13L, 9L), Tuesday_3 = c(4L, 9L, 9L, 8L, 7L,
9L, 12L), Tuesday_4 = c(12L, 18L, 3L, 18L, 6L, 11L, 8L)), class = "data.frame", row.names = c(NA,
-7L))
Run Code Online (Sandbox Code Playgroud)
使用across可以轻松地为您提供:
df |>
mutate(across(.cols = starts_with("Monday")) - across(.cols = starts_with("Tuesday"))) |>
select(id, starts_with("Monday"))
#> id Monday_1 Monday_2 Monday_3 Monday_4
#> 1 1 3 10 10 1
#> 2 2 -3 -5 11 -10
#> 3 3 11 19 -1 8
#> 4 4 -10 -4 9 -15
#> 5 5 18 -9 -3 6
#> 6 6 -1 -3 -7 3
#> 7 7 0 6 -9 9
Run Code Online (Sandbox Code Playgroud)
使用dplyrssummarize
library(dplyr)
df %>%
summarize(id, across(starts_with("Monday")) - across(starts_with("Tuesday")))
id Monday_1 Monday_2 Monday_3 Monday_4
1 1 3 10 10 1
2 2 -3 -5 11 -10
3 3 11 19 -1 8
4 4 -10 -4 9 -15
5 5 18 -9 -3 6
6 6 -1 -3 -7 3
7 7 0 6 -9 9
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
214 次 |
| 最近记录: |