根据指示变量计算列的差异

问题描述 投票:0回答:1

我想根据指标列是“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')
r dataframe group-by
1个回答
0
投票

这有点麻烦,但似乎有效。

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 
© www.soinside.com 2019 - 2024. All rights reserved.