随机抽取给定权重(频率)的数据帧行

时间:2018-02-01 21:24:34

标签: r dplyr

我有一个以下格式的数据框:一列包含原始序列,另一列包含序列发生的次数,以及其他具有其他特征的列。

c1 <- c(324, 213, 122, 34)
c2 <- c("SDOIHHFOEKN", "SDIUFONBSD", "DSLIHFEIHDFS", "DOOIUDBD")
c3 <- c("G", "T", "U", "T")

df <- data.frame(count = c1, seq = c2, other = c3)

我的实际数据框有超过10 ^ 6行和20列。

我想从中随机采样N个序列,同时保持数据帧结构如上所述。例如,我想从上面的数据框中随机抽样300个序列。理论上,此处存在的四个独特序列的比例应保留在最终数据框中。

这种随机抽样如何发生?我正在考虑使用reshape::untable来扩展数据框,然后使用随机数生成器和grep来获取行,但是我无法将其恢复为初始数据帧格式,每行具有唯一的序列和序列显示的次数。

谢谢!

1 个答案:

答案 0 :(得分:2)

使用sample.int获取速度:

sampled_df <- df[sample.int(nrow(df), 300, replace = TRUE, prob = df$count),] %>% 
group_by(seq) %>% 
summarize(count = n(), other=unique(other)) %>% 
as.data.frame

> sampled_df
           seq count other
1     DOOIUDBD    21     T
2 DSLIHFEIHDFS    53     U
3   SDIUFONBSD   102     T
4  SDOIHHFOEKN   124     G