R语言教程:掌握sample()函数进行高效数据抽样与统计分析
这是文章《如何使用R中的sample()函数进行采样?》的第1部分(共6部分)。
让我们来了解一下R中常用的函数之一:sample()
。在数据分析中,抽样是分析师最常见的操作之一。为了研究和理解数据,有时抽取样本是最佳方法,尤其对于大数据而言,这一点尤为重要。
R提供了标准的sample()
函数来从数据集中进行抽样。在许多商业和数据分析问题中,都需要对数据进行抽样。在此过程中,可以选择带或不带替换地生成随机数据,具体示例如下。
开始进入这个话题吧!
R中sample()
函数的语法
sample(x, size, replace = FALSE, prob = NULL)
x
– 向量或数据集。size
– 样本大小。replace
– 是否进行有放回或无放回抽样。prob
– 概率权重。
R中带放回抽样(有重复样本)
你可能会想知道,“带放回抽样”是什么意思?
当你从列表或数据中抽取样本时,如果你指定replace=TRUE
或T
,那么函数将允许重复值的出现。
请按照下面的例子进行操作,该例子清楚地解释了这种情况。
# 样本范围在1到5之间
x<- sample(1:5)
# 打印样本
x
Output -> 3 2 1 5 4
# 样本范围是1到5,样本数量是3
x<- sample(1:5, 3)
# 打印样本 (3个样本)
x
Output -> 2 4 5
# 样本范围是1到5,样本数量是6
x<- sample(1:5, 6)
x
# 显示错误,因为当replace = FALSE时,样本大小不能大于总体大小 (1:5只有5个数字)
Error in sample.int(length(x), size, replace, prob) :
cannot take a sample larger than the population when 'replace = FALSE'
# 指定replace=TRUE或T将允许重复值的出现,这样函数将在1到5的范围内生成6个样本。这里2重复出现。
x<- sample(1:5, 6, replace=T)
Output -> 2 4 2 2 4 3
在R中进行无重复样本抽样
R语言sample()函数:无重复抽样(不放回抽样)
在R语言中,当我们需要进行无重复抽样(即不放回抽样)时,可以使用sample()
函数并设置参数replace = FALSE
。这意味着一旦某个元素被抽取,它将不会再次出现在样本中。
以下是无重复抽样的具体概念和示例:
# 无重复抽样示例
x<-sample(1:8, 7, replace=F)
x
# 输出示例 -> 4 1 6 5 3 2 7
# 注意:当replace=FALSE时,抽样大小不能大于总体大小,否则会报错。
x<-sample(1:8, 9, replace=F)
# 错误提示:cannot take a sample larger than the population when 'replace = FALSE'
# 当抽样大小等于总体大小时,实际上是对总体进行随机排序。
x<- sample(1:5, 5, replace=F)
x
# 输出示例 -> 5 4 1 3 2
使用set.seed()函数控制随机抽样结果
在使用sample()
函数进行抽样时,每次运行代码,结果通常是随机且不同的。为了确保每次都能获得相同的随机样本序列,或者在需要复现结果时,我们可以使用set.seed()
函数。
set.seed()
函数的作用是设定随机数生成器的种子。只要种子值相同,后续生成的随机数序列也将完全一致。
以下示例展示了如何使用set.seed()
来固定抽样结果:
# 设定随机种子为5
set.seed(5)
# 进行有放回抽样(replace=TRUE)
sample(1:5, 4, replace=T)
# 输出:2 3 1 3
# 再次设定相同的随机种子
set.seed(5)
sample(1:5, 4, replace=T)
# 输出:2 3 1 3 (与上次结果相同)
# 第三次设定相同的随机种子
set.seed(5)
sample(1:5, 4, replace=T)
# 输出:2 3 1 3 (结果依然相同)
从数据集中提取样本
这是文章《如何使用R中的sample()函数进行采样?》的第3部分(共6部分)。
在这一部分中,我们将在RStudio中从数据集中生成样本。
以下代码将从ToothGrowth
数据集中随机选取10行作为样本并进行显示。通过这种方式,你可以从数据集中获取所需大小的样本。
# 读取数据集 'ToothGrowth' 并从中抽取10行作为样本
df <- sample(1:nrow(ToothGrowth), 10)
df
# 输出选取的行索引
-> 53 12 16 26 37 27 9 22 28 10
# 抽取这10行数据
ToothGrowth[df,]
# 输出结果
len supp dose
53 22.4 OJ 2.0
12 16.5 VC 1.0
16 17.3 VC 1.0
26 32.5 VC 2.0
37 8.2 OJ 0.5
27 26.7 VC 2.0
9 5.2 VC 0.5
22 18.5 VC 2.0
28 21.5 VC 2.0
10 7.0 VC 0.5
使用set.seed()
函数从数据集中获取可复现的样本
这是文章《如何使用R中的sample()函数进行采样?》的第4部分(共6部分)。
在本节中,我们将使用set.seed()
函数从数据集中提取样本。
使用set.seed()
执行下面的代码来从数据集中生成样本。
# 设置随机种子,确保结果可复现
set.seed(10)
# 从iris数据集中随机抽取10行的索引
x<- sample(1:nrow(iris), 10)
x
--> 137 74 112 72 88 15 143 149 24 13
# 显示抽取的这10行数据
iris[x, ]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
137 6.3 3.4 5.6 2.4 virginica
74 6.1 2.8 4.7 1.2 versicolor
112 6.4 2.7 5.3 1.9 virginica
72 6.1 2.8 4.0 1.3 versicolor
88 6.3 2.3 4.4 1.3 versicolor
15 5.8 4.0 1.2 0.2 setosa
143 5.8 2.7 5.1 1.9 virginica
149 6.2 3.4 5.4 2.3 virginica
24 5.1 3.3 1.7 0.5 setosa
13 4.8 3.0 1.4 0.1 setosa
当您多次执行上述代码时,您将获得相同的行。这是因为我们使用了set.seed()
函数,确保了随机数生成器的起始状态固定,从而使得每次运行的结果都保持一致。
使用R中的sample()
函数生成一个随机样本
好的,我们通过一个实际问题来帮助您深入理解 sample()
函数的概念。
问题情境:随机抽取幸运顾客
一家礼品店决定为其中一位忠实顾客送上一份惊喜礼物。为此,他们收集了一份顾客名单。关键在于,他们需要从这份名单中随机选择一个名字。
提示:您可以使用R语言中的 sample()
函数来生成随机样本。
下面的代码示例展示了如何使用 sample()
函数从参与者姓名列表中随机抽取一个名字。每次运行这段代码,您都会得到一个不同的随机结果:
# 创建一个姓名列表,并从该列表中随机抽取一个样本
sample(c('jack','Rossie','Kyle','Edwards','Joseph','Paloma','Kelly','Alok','Jolie'),1)
--> "Rossie"
sample(c('jack','Rossie','Kyle','Edwards','Joseph','Paloma','Kelly','Alok','Jolie'),1)
--> "Jolie"
sample(c('jack','Rossie','Kyle','Edwards','Joseph','Paloma','Kelly','Alok','Jolie'),1)
--> "jack"
sample(c('jack','Rossie','Kyle','Edwards','Joseph','Paloma','Kelly','Alok','Jolie'),1)
--> "Edwards"
sample(c('jack','Rossie','Kyle','Edwards','Joseph','Paloma','Kelly','Alok','Jolie'),1)
--> "Kyle"
通过设置概率进行抽样
通过上述的例子和概念,您已经了解了如何生成随机样本并从数据集中提取特定数据。
如果我说R语言可以设置概率进行抽样,这可能会让您感到轻松,因为它能解决许多实际问题。接下来,我们通过一个简单的例子来看看它是如何工作的。
假设一家公司生产10块手表,其中20%存在缺陷。我们可以通过以下代码来模拟这种情况:
# 创建80%好手表和20%缺陷手表的概率分布。
sample(c('Good','Defective'), size=10, replace=T, prob=c(.80,.20))
"Good" "Good" "Good" "Defective" "Good" "Good"
"Good" "Good" "Defective" "Good"
您还可以尝试调整不同的概率选项,如下所示:
sample(c('Good','Defective'), size=10, replace=T, prob=c(.60,.40))
--> "Good" "Defective" "Good" "Defective" "Defective" "Good"
"Good" "Good" "Defective" "Good"
总结
在本教程中,您学习了如何使用R语言从数据集、向量和列表中进行抽样,包括有放回和无放回抽样。当您需要生成可复现的样本序列时,set.seed()
函数将非常有用。
建议您尝试从R中内置的各种数据集中进行抽样,同时也可以导入CSV文件并调整概率参数进行更复杂的抽样练习。
更多学习资源请参考:R官方文档