我想从数据中获取样本,使得变量的原始比例保持不变。例如,如果在我的原始数据中,有1000个值,其中有100个a值,800个b值和100个c值。如果我从这个原始数据中取出100个值的样本,它应该有10个a值,80个b值和10个c值。请帮忙!
答案 0 :(得分:0)
tidyverse
包具有一些很好的功能,可以帮助解决这个问题。
library(tidyverse)
data <- tibble(Group = c(rep("a", 100), rep ("b", 800), rep("c", 100)),
Value = runif(1000))
sampledData <- data %>%
group_by(Group) %>%
sample_frac(0.1)
我们创建了一个非常简单的数据集示例,其中包含随机统一值和3个组,其中100个来自a
,800个来自b
,100个来自c
。
使用函数group_by
,我们将该组变量的数据分组,这样当我们使用函数sample_frac
时,该函数将分别对所有组执行。
我们可以使用table
:
> table(sampledData$Group)
a b c
10 80 10
注意强>:
此答案使用tidyverse
管道运算符%>%
,这相当于:
sampledData <- sample_frac(group_by(data, Group), 0.1)