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

时间:2015-10-21 15:02:43

标签: r

我有50 000行数据。我想从这些数据中制作样本(拆分?)。 Sample-1可能包含2个组,每个组的大小为25 000Sample-2可能包含5个小组,每个小组都有10 000个等等。我希望有一个列,其中会有一个值,具体取决于组的数量。例如,在Sample-1的情况下,在此列中,我将看到1,2,2,1,2,1,1,2的随机序列。如果是Sample-2,我会1,3,2,1,4,1,5,...。我不知道如何在R中解决这个问题,我希望有一个快速简便的解决方案。

2 个答案:

答案 0 :(得分:3)

这是一个想法:

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组并不总是得到第一个额外的项目),你可以像这样修改上面的功能:

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

答案 1 :(得分:2)

sample提供包含无序组的向量。

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无法保证为整数,则可以使用此

n.group <- 3
n.row <- 10
unordered <- rep(
  seq_len(n.group),
  each = ceiling(n.row / n.group)
)
sample(unordered, size = n.row)