首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数据集拆分为N个大小相等的组并为它们分配一个数字

如何将数据集拆分为N个大小相等的组并为它们分配一个数字
EN

Stack Overflow用户
提问于 2015-10-21 15:02:43
回答 2查看 3.2K关注 0票数 0

我有50 000行数据。我想做样本(分裂?)从这些数据。Sample-1可能包含大小为25 000的每个2组。Sample-2可能包含5组、每个大小的10 000等等。我希望有一个列,其中将有一个值,这取决于组的数量。例如,对于Sample-1,在本专栏中,我将看到1,2,2,1,2,1,1,2的随机序列。如果是Sample-2,我要1,3,2,1,4,1,5,...。我不知道如何在R中解决这个问题,我希望有一个快速而简单的解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-21 15:23:46

这里有一个想法:

代码语言:javascript
复制
f <- function(n.row, n.group) {
    sample(rep(seq_len(n.group), length.out = n.row))
}

## A few sample runs
f(3,2)
# [1] 1 2 1
f(5,2)
# [1] 1 1 2 1 2
f(10,4)
#  [1] 1 1 2 2 4 3 2 4 3 1

您会注意到,当组数没有干净地划分行数时,“额外”项按计数顺序放入组中。如果这对您来说很重要,这是不发生的(即第1组并不总是得到第一个额外的项),您可以这样修改上面的函数:

代码语言:javascript
复制
f2 <- function(n.row, n.group) {
    ii <- sample(rep(seq_len(n.group), length.out = n.row))
    sample(seq_len(n.group))[ii]
}

## Check that overall frequency of group assignment isn't skewed
f2(3,2)
# [1] 2 1 1
f2(3,2)
# [1] 2 1 2
f2(3,2)
# [1] 2 1 2
票数 3
EN

Stack Overflow用户

发布于 2015-10-21 15:15:18

sample提供带有无序组的向量。

代码语言:javascript
复制
n.group <- 2
n.row <- 10
unordered <- rep(
  seq_len(n.group),
  each = n.row / n.group
)
sample(unordered)

seq_len(n.group)创建一个向量,其组号从1到组数不等。rep重复每个sample中定义的组号,以调整组号的顺序。

如果不能保证n.row/n.group为整数,则可以使用

代码语言:javascript
复制
n.group <- 3
n.row <- 10
unordered <- rep(
  seq_len(n.group),
  each = ceiling(n.row / n.group)
)
sample(unordered, size = n.row)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33262795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档