我有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中解决这个问题,我希望有一个快速而简单的解决方案。
发布于 2015-10-21 15:23:46
这里有一个想法:
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发布于 2015-10-21 15:15:18
向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)https://stackoverflow.com/questions/33262795
复制相似问题