32

我试图从一组 5655 个观察中选择 3500 个随机观察。但是当我这样做时,R会抛出一个奇怪的错误,说“当'replace = FALSE'时不能抽取大于总体的样本”

我正在尝试抽取一个小于总体的样本。为什么R会抛出这个错误?

nrow(males)
[1] 5655
m = sample(males, 3500, replace = FALSE, prob = NULL)

sample.int(length(x), size, replace, prob) 中的错误:当“replace = FALSE”时,样本不能大于总体

4

5 回答 5

41

您需要从数字中采样,而不是从数据框中。然后使用结果来获取采样的行。

m <- males[sample(nrow(males), 3500, replace = FALSE, prob = NULL),]
于 2013-10-29T01:51:29.427 回答
3

您还可以使用 $ 选择要从中采样的数据集中的特定列。前任:m <- sample(dataframename$variable, 3500)

于 2018-02-23T18:46:30.310 回答
1

如果您不小心sample()在实际想要使用的地方使用了sample_n().

例子

想要的

iris %>% 
  sample(10)
# Error in sample.int(length(x), size, replace, prob) : 
#   cannot take a sample larger than the population when 'replace = FALSE'

改为使用sample_n()

library(dplyr)

iris %>% 
  sample_n(10)
#    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
# 1           4.6         3.6          1.0         0.2    setosa
# 2           5.4         3.7          1.5         0.2    setosa
# 3           5.0         3.6          1.4         0.2    setosa
# 4           6.7         3.3          5.7         2.1 virginica
# 5           6.2         3.4          5.4         2.3 virginica
# 6           4.3         3.0          1.1         0.1    setosa
# 7           5.8         2.7          5.1         1.9 virginica
# 8           5.8         2.8          5.1         2.4 virginica
# 9           6.8         3.2          5.9         2.3 virginica
# 10          7.6         3.0          6.6         2.1 virginica
于 2022-02-03T03:51:45.950 回答
1

另一种解决方案是使用 dplyr

library(dplyr)
males %>% sample_n(3500, replace = FALSE, prob = NULL)

#if you don't like the pipe notation, this works equally well
sample_n(males, 3500, replace = FALSE, prob = NULL)

于 2021-12-16T14:57:30.417 回答
0

将替换从 False 更改为 True

m = sample(males, 3500, replace = True, prob = NULL)
于 2019-11-17T07:45:56.870 回答