具有全局条件的行的随机采样

问题描述 投票:0回答:1

我有一个包含 200 行 5 列的数据集,全是字符。这是一个非常简化的表示,里面没有数据。

bird<-data.frame(matrix(0,nrow=200,ncol=5)) 
colnames(bird)<-c("id","var1","var2","var3","var4")

对于每个变量,组都是不平衡的,有时非常罕见的组只出现了几次(在 var2 和 var3 中),而其他组则在数据集中出现得更多。

我需要随机采样该数据集才能最终获得 30 行。条件是全局的,这意味着最后我需要:

  • “var1”中每个组的等效比例(只有两个组,所以我需要接近 50/50 的值,知道原始数据集显示类似 80/20 的值)
  • “var2”和“var3”中每个组全局至少 1 行(但没有最大数量)
  • “var4”是最棘手的:不需要每个组,但对于所选的组,至少需要 3 行位于最后的样本中。

因此,不需要对每个变量组合进行采样,因为条件是全局的。

我尝试不同的事情,但条件的复杂性以及它们根据你考虑的变量而不同的事实导致了一种远远超出我 R 技能的情况。

我已经在包中尝试过“分层”了

splitstackshape
但没有取得任何结论。

我认为

dyplr
方法是可能的,但我不是特别熟悉

r dplyr sampling splitstackshape
1个回答
0
投票

这可以作为 dplyr 中的 slice_sample 函数使用:

library(dplyr)
new_df <- bird %>%
 group_by(var1) %>% 
 slice_sample(prop = 0.5)

您可以指定每组的样本数量、样本案例的比例。

在旧版本的 R 中,该函数称为 sample_n,已被弃用。

© www.soinside.com 2019 - 2024. All rights reserved.