从数据框或矩阵中随机采样连续的行
Randomly sample contiguous rows from a data frame or matrix
我想从数据框中抽取一些连续的行 df
。
df <- data.frame(C1 = c(1, 2, 4, 7, 9), C2 = c(2, 4, 6, 8, 10))
我正在尝试获得类似于以下内容的内容,它允许我对 3 个随机行进行采样并重复该过程 100 次。
test <- replicate(100, df[sample(1:nrow(df), 3, replace=T),], simplify=F)
连续 结果应该是这样的:
[[1]]
C1 C2
2 2 4
3 4 6
4 7 8
[[2]]
C1 C2
1 1 2
2 2 4
3 4 6
.
.
.
我怎样才能做到这一点?
我们只需要对块的起始行索引进行采样。
sample.block <- function (DF, chunk.size) {
if (chunk.size > nrow(DF)) return(NULL)
start <- sample.int(nrow(DF) - chunk.size + 1, 1)
DF[start:(start + chunk.size - 1), ]
}
replicate(100, sample.block(df, 3), simplify = FALSE)
我想从数据框中抽取一些连续的行 df
。
df <- data.frame(C1 = c(1, 2, 4, 7, 9), C2 = c(2, 4, 6, 8, 10))
我正在尝试获得类似于以下内容的内容,它允许我对 3 个随机行进行采样并重复该过程 100 次。
test <- replicate(100, df[sample(1:nrow(df), 3, replace=T),], simplify=F)
连续 结果应该是这样的:
[[1]]
C1 C2
2 2 4
3 4 6
4 7 8
[[2]]
C1 C2
1 1 2
2 2 4
3 4 6
.
.
.
我怎样才能做到这一点?
我们只需要对块的起始行索引进行采样。
sample.block <- function (DF, chunk.size) {
if (chunk.size > nrow(DF)) return(NULL)
start <- sample.int(nrow(DF) - chunk.size + 1, 1)
DF[start:(start + chunk.size - 1), ]
}
replicate(100, sample.block(df, 3), simplify = FALSE)