我有一个大约有280K观测值的数据集。但是,该观察的大部分属于列的一个特定值。这是计数
Category Count
A 8981
B 6146
C 243369
D 10678
F 4431
G 2421
H 1009
I 7948
如果你看到C类有243K这样的记录而有些则非常。我想以这样一种方式对数据进行下采样,即保留其他类别值的所有记录,同时仅保留“C”类中随机记录的一定百分比。比如大概10%左右。通过这种方式,我可以在所有这些类别中正确分配数据。
如何在postgres中实现这一目标?
答案 0 :(得分:1)
查询从表中选择一个随机行,其中只包含10%的category C
行和所有包含其他类别的行:
select *
from (
(select *
from observations
where category = 'C'
order by random()
limit 243369* 0.1)
union
(select *
from observations
where category <> 'C')
) sub
order by random()
limit 1;