r - 通过R中的组计算多行之间的差异
问题描述
我有一个这样的数据框(比这个例子有更多的观察和代码变量):
code tmp wek sbd
<chr> <chr> <dbl> <dbl>
1 abc01 T1 1 7.83
2 abc01 T1 1 7.83
3 abc01 T1 2 8.5
4 abc01 T1 2 8.5
5 abc01 T1 1 7.83
6 abc01 T1 1 7.83
7 abc01 T1 1 7.83
8 abc01 T1 1 7.83
9 abc01 T1 1 7.83
10 abc01 T2 1 7.56
11 abc01 T2 1 7.56
12 abc01 T2 2 7.22
13 abc01 T2 2 7.22
14 abc01 T2 1 7.56
15 abc01 T2 1 7.56
16 abc01 T2 1 7.56
17 abc01 T2 1 7.56
18 abc01 T2 1 7.56
现在我想计算一个新变量,通过代码和 tmp 变量给出变量 sbd 在 wek = 1 和 wek = 2 之间的差异。
到目前为止,我刚刚找到了可以区分连续行的函数,但这不适合我的情况。
解决方案
您可以使用1 和 2match
获取对应的sbd
值。wk
library(dplyr)
df %>%
group_by(code, tmp) %>%
summarise(diff = sbd[match(1, wek)] - sbd[match(2, wek)])
# code tmp diff
# <chr> <chr> <dbl>
#1 abc01 T1 -0.67
#2 abc01 T2 0.34
如果要在数据框中添加新列以保持行相同,请使用mutate
而不是summarise
.
数据
如果您以可重现的格式提供数据,则更容易提供帮助
df <- structure(list(code = c("abc01", "abc01", "abc01", "abc01", "abc01",
"abc01", "abc01", "abc01", "abc01", "abc01", "abc01", "abc01",
"abc01", "abc01", "abc01", "abc01", "abc01", "abc01"), tmp = c("T1",
"T1", "T1", "T1", "T1", "T1", "T1", "T1", "T1", "T2", "T2", "T2",
"T2", "T2", "T2", "T2", "T2", "T2"), wek = c(1L, 1L, 2L, 2L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L), sbd = c(7.83,
7.83, 8.5, 8.5, 7.83, 7.83, 7.83, 7.83, 7.83, 7.56, 7.56, 7.22,
7.22, 7.56, 7.56, 7.56, 7.56, 7.56)),
class = "data.frame", row.names = c(NA, -18L))
推荐阅读
- c++ - 使用 C++ 的回文程序的不需要的输出
- ios - 如何从 IOS Swift 'Any' 类型访问和获取嵌套值?
- java - graphql java - 如何找出“提供的模式无效”的根本原因?
- python - 使用 pyparsing 将 lvm.conf 转换为 python dict
- mysql - 根据连接表中设置的最新状态获取结果
- python - 如何用python替换字符串中除了replace()的最后一个实例之外的所有实例?
- python-3.x - 逐块迭代加载图像,其中块部分重叠
- python - 如何将python集与redis集相交
- javascript - Rails 5/6: How to include JS functions with webpacker?
- dart - 如何检查小部件是否已安装在颤振中