有没有一种方法可以将功能重复执行固定的次数,并将每个结果保存为数据帧?

时间:2019-12-02 20:03:24

标签: r

假设我有一个看起来像这样的数据框

A <- c(1:100)
B <- c(0.5:100)
df <- data.frame(A,B)

我想从这个数据框中获得25个随机行

df[sample(nrow(df), size = 25, replace = FALSE),]

但是现在我要重复此示例函数100次,并分别保存每个结果。 我尝试使用重复功能,但是找不到保存所有结果的方法。

谢谢。

2 个答案:

答案 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创建