r - 按类别随机抽样,R中每个类别需要不同数量的样本
问题描述
我有一个问题要在 R 中进行一些随机抽样。我有两个数据集。一个数据集,比如 df1,被组织起来,其中每个观察都是一个样本,并且收集样本的位置在变量“loc”下。“loc”设置为字符。下面显示了一个示例数据布局。
ID loc x1 x2 x3
1 A x x x
2 A x x x
3 A x x x
4 B x x x
5 B x x x
6 C x x x
7 C x x x
8 C x x x
9 C x x x
etc.
第二个数据集,比如 df2,是所有位置的列表以及每个位置所需的随机样本数。它看起来像这样:
loc n
A 2
B 1
C 3
我想知道如何按组获取不同数量的随机样本,其中所需的样本数在 df2.
解决方案
我们可以split
通过'loc'来使用第一个数据集,使用第二个数据集中对应的'n'map2
循环list
并使用它sample_n
library(purrr)
library(dplyr)
map2_dfr(df1 %>%
group_split(loc), df2$n, ~ .x %>%
sample_n(.y))
# A tibble: 6 x 5
# ID loc x1 x2 x3
# <int> <chr> <chr> <chr> <chr>
#1 1 A x x x
#2 2 A x x x
#3 5 B x x x
#4 6 C x x x
#5 8 C x x x
#6 7 C x x x
或者另一种选择是match
df1 %>%
group_by(loc) %>%
sample_n(df2$n[match(first(loc), df2$loc)])
数据
df1 <- structure(list(ID = 1:9, loc = c("A", "A", "A", "B", "B", "C",
"C", "C", "C"), x1 = c("x", "x", "x", "x", "x", "x", "x", "x",
"x"), x2 = c("x", "x", "x", "x", "x", "x", "x", "x", "x"), x3 = c("x",
"x", "x", "x", "x", "x", "x", "x", "x")), class = "data.frame",
row.names = c(NA,
-9L))
df2 <- structure(list(loc = c("A", "B", "C"), n = c(2L, 1L, 3L)),
class = "data.frame", row.names = c(NA,
-3L))
推荐阅读
- flutter - 如何获取存储在我的数据库中的坐标的纬度和经度以等待 Geolocator().distanceBetween 颤动
- python - 如何迭代导致 typeError 的函数?
- r - 在 R 中随时间绘制数据
- ietf-netmod-yang - 如何将 yang 模型中的某些参数设置为只读
- memory-management - 任何人都可以解释OOM杀手中的oom_badness()得分吗?
- keras - 使用 DL4j 加载 keras 模型时出错:“nn.modelimport.keras.Hdf5Archive:OBJECT 条目内/之间的意外输入结束”
- git - 如何将 origin/not-master 与 upstream/master 同步
- java - 如何在注册 DefaultScalaModule 的 Spring 应用程序中使用 Jackson 将 JSON 对象反序列化为 Java 集合?
- python - ValueError: Invalid parameter C for estimator SelectFromModel when using GridSearchCV
- python - 试图制作一个whatsapp bot