gpt4 book ai didi

r - 如何在 R 中对具有给定条件(累积和)的数据进行分组?

转载 作者:行者123 更新时间:2023-12-02 19:00:23 25 4
gpt4 key购买 nike

我想对行进行分组,直到累计总数超过 200。

如果值超过 200,我们要创建一个新组。

这是一个数据集:

data = data.frame(c(0,110,1011,1014,622,1,3,1173,3,6))
colnames(data)<-c("data")

data
1 0
2 110
3 1011
4 1014
5 622
6 1
7 3
8 1173
9 3
10 6
11 199
12 1
13 200

我想要的是:

data$group<-c(1,1,2,3,4,5,5,6,7,7)

data group
1 0 1 #(cum:0, group:1)
2 110 1 #(cum:110,group:1)
3 1011 2 #(cum:1011, if the value exceeds the 200, assign new group, group: 2)
4 1014 3 #(cum:1011, if the value exceeds the 200, assign new group, group: 3)
5 622 4 #(cum:622, if the value exceeds the 200, assign new group, group: 4)
6 1 5 #(cum:1, re-start, group: 5)
7 3 5 #(cum:4, re-start, group: 5)
8 1173 6 #(cum:6, if the value exceeds the 200, assign new group, group: 4)
9 3 7 #(cum:3, re-start, group: 7)
10 6 7 #(cum:9, re-start, group: 7)
11 199 8
12 1 8
13 200 9

最佳答案

这是一个用户函数 f 可能有助于按照您的描述进行分组

f <- function(v, threshold = 200) {
grp <- c()
cnt <- 1
while (length(v)) {
n <- sum(cumsum(v) <= threshold)
grp <- c(grp, rep(cnt, max(n, 1)))
v <- v[-(1:max(n, 1))]
cnt <- cnt + 1
}
grp
}

给出

> within(data, group <- f(data))
data group
1 0 1
2 110 1
3 1011 2
4 1014 3
5 622 4
6 1 5
7 3 5
8 1173 6
9 3 7
10 6 7
11 199 8
12 1 8
13 200 9

关于r - 如何在 R 中对具有给定条件(累积和)的数据进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65647860/

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