gpt4 book ai didi

r - 如何找出分组的非连续行的差异?

转载 作者:行者123 更新时间:2023-12-01 14:03:13 25 4
gpt4 key购买 nike

我有一个包含数千条记录的数据框。我的数据框如下所示:

Row     ID     OBS      Dist_cover
1 2 1 60
2 2 0 140
3 2 0 15
4 2 0 147
5 2 0 37
6 2 0 89
7 3 1 239
8 3 0 62
9 3 0 11
10 3 0 193

我需要找到 Dist_cover 中“1”和“0”OBS 值之间的差异...但按分组id。本质上,我正在寻找 [1,4] - [2,4]、[1,4] - [3,4]、[1,4] - [4,4]、[1,4] 之间的差异- [5,4]、[1,4] - [6,4] 和 [7,4] - [8,4]、[7,4] - [9,4]、[7,4] - [ 10,4] 等。我尝试了 dplyr (mutate) 和 data.base 包的各种方法,但只弄清楚如何运行连续行,无法弄清楚如何按 id 分组.有什么想法吗?

最佳答案

你想要的可以用ave来完成,按IDDist_cover进行分组。

请注意,虽然问题指出应该按 OBS 进行分组,但这实际上是不需要的。等于 1 的 OBS 始终是第一个,就像问题中(隐式)指出的那样。 OP想要“[1,4] - [2,4]、[1,4] - [3,4]等之间的差异”

ave(dat$Dist_cover, dat$ID, FUN = function(x) x - x[1])
#[1] 0 80 -45 87 -23 29 0 -177 -228 -46

数据。

dat <-
structure(list(Row = 1:10, ID = c(2L, 2L, 2L, 2L, 2L, 2L, 3L,
3L, 3L, 3L), OBS = c(1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L),
Dist_cover = c(60L, 140L, 15L, 147L, 37L, 89L, 239L, 62L,
11L, 193L)), .Names = c("Row", "ID", "OBS", "Dist_cover"), class = "data.frame", row.names = c(NA,
-10L))

关于r - 如何找出分组的非连续行的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50939428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com