gpt4 book ai didi

r - 按连接值对 R 数据帧进行分组

转载 作者:行者123 更新时间:2023-12-03 15:12:18 29 4
gpt4 key购买 nike

我没有在 R 中找到这个常见分组问题的解决方案:

这是我的原始数据集

ID  State
1 A
2 A
3 B
4 B
5 B
6 A
7 A
8 A
9 C
10 C

这应该是我的分组结果数据集
State   min(ID) max(ID)
A 1 2
B 3 5
A 6 8
C 9 10

所以想法是首先按 ID 列(或时间戳列)对数据集进行排序。然后所有没有间隙的连接状态应该组合在一起,并且应该返回最小和最大 ID 值。它与 rle 方法有关,但这不允许计算组的最小值、最大值。

有任何想法吗?

最佳答案

你可以试试:

library(dplyr)
df %>%
mutate(rleid = cumsum(State != lag(State, default = ""))) %>%
group_by(rleid) %>%
summarise(State = first(State), min = min(ID), max = max(ID)) %>%
select(-rleid)

或者按照@alistaire 在评论中提到的,你实际上可以在 group_by() 内变异。使用相同的语法,结合前两个步骤。盗版 data.table::rleid()并使用 summarise_all()简化:
df %>% 
group_by(State, rleid = data.table::rleid(State)) %>%
summarise_all(funs(min, max)) %>%
select(-rleid)

这使:
## A tibble: 4 × 3
# State min max
# <fctr> <int> <int>
#1 A 1 2
#2 B 3 5
#3 A 6 8
#4 C 9 10

关于r - 按连接值对 R 数据帧进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39511614/

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