我想根据指标列是“grp1”还是“grp2”来计算下面列 col1 的值之间的差异。我可以通过创建一个子集来手动执行此操作,但这变得很笨拙。我无法找到一些简单的方法来使用 group_by:
df <- data.frame(c(1,2,3,4,5,6), c('grp1', 'grp2', 'grp1', 'grp2', 'grp1', 'grp2'))
colnames(df) <- c('col1', 'ind1')
我的目标是这样的:
df <- data.frame(c(1,2,1,3,4,1,5,6,1), c('grp1', 'grp2','diff', 'grp1', 'grp2','diff', 'grp1', 'grp2','diff'))
colnames(df) <- colnames('col1', 'ind1')
这有点麻烦,但似乎有效。
library(tidyverse)
df |>
mutate(grp = (row_number()+1) %/% 2) |>
pivot_wider(names_from = ind1, values_from = col1) |>
mutate(diff = grp2 - grp1) |>
pivot_longer(-grp, names_to = "ind1", values_to = "col1") |>
select(col1, ind1)
结果
col1 ind1
<dbl> <chr>
1 1 grp1
2 2 grp2
3 1 diff
4 3 grp1
5 4 grp2
6 1 diff
7 5 grp1
8 6 grp2
9 1 diff