gpt4 book ai didi

r - 将数据分成均等的组

转载 作者:行者123 更新时间:2023-12-01 23:07:27 25 4
gpt4 key购买 nike

我正在寻找一种方法将数据框分成大小相等的组(每组中的行数基本上相同),这些组的平均值几乎相等。

User Data<br/>
1 5.0<br/>
2 4.5<br/>
3 3.5<br/>
4 6.0<br/>
5 7.0<br/>
6 6.5<br/>
7 5.5<br/>
8 6.2<br/>
9 5.7<br/>
10 5.9

这与 this request 非常相似然而,这只会将数据分成两组。

我的实际数据集包含 75-150 行,我需要将其分成 5-10 组,均值相等且大小相当。

过去几天,我在 Google 和 Stack Exchange 上进行了研究,但运气不佳。任何指导都会很棒。

提前致谢!

更多详情:

也许我需要提供更多细节,下面我提供了一个真实的数据集。我们是一家运输公司,该数据集提供了司机 ID、英里数、加仑数。我一直在做的是将数据读入 R,然后像这样添加 MPG 列:

data <- read.csv('filename')  
data$MPG <- data$Miles / data$Gallons

然后我尝试了下面提供的两个答案。 Arun 的想法给了我几乎相等的组大小(每组 9 名成员,10 个组),但是均值的变化很大,从 6.615 - 7.093 这对我来说太大了,无法开始。 Thomas 的想法有更严格的变化,但小组人数从 6 到 13 人不等。

我们要做的是提高车队 MPG,我们将通过基于团队的比赛来实现这一目标,因此我需要随机将团队与他们放在一起,所有团队都从相对相同的 MPG 组开始。

也许这有助于并引导我们朝着正确的方向前进?我试着用我的编程语言来做这件事,但它每次都会锁定计算机,所以我认为 R 可能能够更好地处理数据。

再次感谢!

最佳答案

如果相似的方法真的很重要,我在下面做了一个模拟,它基本上针对特定的组大小 (n) 查看一堆不同的数据组合 (k),然后最小化组均值的方差。通过这种最小化,您可以从模拟结果中提取该分组。

df <- data.frame(User=1:1000,Data=rnorm(1000,0,1))     # example data
myfun = function(){
k <- 5 # number of groups
tmp <- seq(length(mpg))%%ngroups # really efficient code from @qwwqwwq's answer
thisgroup <- sample(tmp, dim(df)[1], FALSE) # pull a sample
# thisgroup <- sample(1:k,dim(df)[1],TRUE) # original version
thisavg <- as.vector(by(df$Data, thisgroup, mean)) # group means
thisvar <- var(thisavg) # variance of means
return(list(group=thisgroup, avgs=thisavg, var=thisvar))
}
n <- 1000 # number of simulations
sorts <- replicate(n, myfun(), simplify=FALSE)
wh <- which.min(sapply(sorts, function(x) x$var)) # minimization
# sorts[[wh]] # this is the sample you want
split(df, sorts[[wh]]$group) # list of separate dataframes for each group

你也可以有 k大小不同,如果您不关心每组中有多少个案例,只需移动 k <- 5将其插入函数中,并从您愿意拥有的组数范围内随机抽取。

不过,可能还有其他方法可以做到这一点。

关于r - 将数据分成均等的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17497164/

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