假设我有一个看起来像这样的数据框
A <- c(1:100)
B <- c(0.5:100)
df <- data.frame(A,B)
我想从这个数据框中获得25个随机行
df[sample(nrow(df), size = 25, replace = FALSE),]
但是现在我要重复此示例函数100次,并分别保存每个结果。 我尝试使用重复功能,但是找不到保存所有结果的方法。
谢谢。
答案 0 :(得分:0)
replicate
实现可以达到您的目标,即res <- replicate(100,df[sample(nrow(df), size = 25, replace = FALSE),],simplify = F)
sapply
(或lapply
),即res <- sapply(1:100, function(k) df[sample(nrow(df), size = 25, replace = FALSE),],simplify = F)
或
res <- lapply(1:100, function(k) df[sample(nrow(df), size = 25, replace = FALSE),])
答案 1 :(得分:0)
replicate()
是解决此问题的理想选择。
如果您希望最终结果在一个带有ID变量列的表中,则可以使用bind_rows()
包中的dplyr
。这是一个较小的示例(来自10行数据集中的3个样本),可以更轻松地了解replicate()
的行为:
library(dplyr, warn.conflicts = FALSE)
# make a smaller data set of 10 rows
d <- data.frame(
A = 1:10,
B = LETTERS[1:10]
) %>% print
#> A B
#> 1 1 A
#> 2 2 B
#> 3 3 C
#> 4 4 D
#> 5 5 E
#> 6 6 F
#> 7 7 G
#> 8 8 H
#> 9 9 I
#> 10 10 J
# create 3 samples, with each sample containing 4 rows
reps <- replicate(3, d[sample(nrow(d), 4, FALSE), ], simplify = FALSE) %>% print
#> [[1]]
#> A B
#> 2 2 B
#> 5 5 E
#> 6 6 F
#> 1 1 A
#>
#> [[2]]
#> A B
#> 3 3 C
#> 2 2 B
#> 5 5 E
#> 8 8 H
#>
#> [[3]]
#> A B
#> 4 4 D
#> 9 9 I
#> 3 3 C
#> 8 8 H
# bind the list elements into a single tibble, with an ID column for the sample
bind_rows(reps, .id = "sample_id")
#> sample_id A B
#> 1 1 2 B
#> 2 1 5 E
#> 3 1 6 F
#> 4 1 1 A
#> 5 2 3 C
#> 6 2 2 B
#> 7 2 5 E
#> 8 2 8 H
#> 9 3 4 D
#> 10 3 9 I
#> 11 3 3 C
#> 12 3 8 H
由reprex package(v0.3.0)于2019-12-02创建