我有一个包含 200 行 5 列的数据集,全是字符。这是一个非常简化的表示,里面没有数据。
bird<-data.frame(matrix(0,nrow=200,ncol=5))
colnames(bird)<-c("id","var1","var2","var3","var4")
对于每个变量,组都是不平衡的,有时非常罕见的组只出现了几次(在 var2 和 var3 中),而其他组则在数据集中出现得更多。
我需要随机采样该数据集才能最终获得 30 行。条件是全局的,这意味着最后我需要:
因此,不需要对每个变量组合进行采样,因为条件是全局的。
我尝试不同的事情,但条件的复杂性以及它们根据你考虑的变量而不同的事实导致了一种远远超出我 R 技能的情况。
我已经在包中尝试过“分层”了
splitstackshape
但没有取得任何结论。
我认为
dyplr
方法是可能的,但我不是特别熟悉
这可以作为 dplyr 中的 slice_sample 函数使用:
library(dplyr)
new_df <- bird %>%
group_by(var1) %>%
slice_sample(prop = 0.5)
您可以指定每组的样本数量、样本案例的比例。
在旧版本的 R 中,该函数称为 sample_n,已被弃用。