r - 从 R 中的分组数据中选择 n 个随机组
问题描述
我已经对聚集在 160 所学校中的学生组成的数据进行了分组。我想从该数据集中随机抽取 30 所学校作为样本。我硬编码了一个解决方案(见下文),但是在 R 中是否有包装函数或更快捷的方法来做到这一点?有点像 sample_n() 或 top_n(),但它们每组返回 n 个观察值,而我想要来自 n 个组的 100% 的观察值。
# First, some example data. Each row represents one student in a given school, and that student's favourite fruit.
df <- tribble(
~school_id, ~favourite_fruit,
#----------#---------------
1, "apple",
1, "banana",
2, "kiwi",
2, "tomato",
3, "strawberry",
3, "cherry",
4, "orange",
4, "lime"
)
# My hard-coded solution
school_vector <- df %>%
group_by(school_id) %>%
select(school_id) %>%
count() %>%
ungroup() %>%
select(school_id) %>%
sample_n(2)
df_subset <- df %>%
filter(school_id %in% school_vector$school_id) %>%
as_tibble()
解决方案
您可以在其中创建一个school_id
s样本filter
并将其与您当前的%in%
逻辑一起使用
df %>%
filter(school_id %in% sample(unique(school_id), 2))
# # A tibble: 4 x 2
# school_id favourite_fruit
# <dbl> <chr>
# 1 3 strawberry
# 2 3 cherry
# 3 4 orange
# 4 4 lime
作为一个函数:
group_samp <- function(df, group_var, n){
df %>%
filter({{group_var}} %in% sample(unique({{group_var}}), n))
}
df %>%
group_samp(school_id, 2)
# # A tibble: 4 x 2
# school_id favourite_fruit
# <dbl> <chr>
# 1 1 apple
# 2 1 banana
# 3 2 kiwi
# 4 2 tomato
推荐阅读
- python-3.x - 如何使用键路径获取字典的值
- javascript - 如何使用 JQuery 和 PHP 更新 PHP 查询以实时反映表单选择
- apache-spark - 使用 Docker 和连接器将 kafka 连接到 spark、spark 到 cassandra 和 kafka 到 cassandra
- xaml - 图像上的 Xamarin.Forms 按钮
- javascript - 无法访问“process.env”中的 Node.js 环境变量
- flask - 我在哪里可以设置 Keycloak 标头有效期
- java - JFileChooser 在 Mac 中不显示窗口
- c# - 如何在物体产生几秒钟后摧毁它?
- regex - 如何使用 Rust 正则表达式拆分字符串并保留分隔符?
- php - 使用 cron 作业每天从数组中获取 3 个项目