我有一个以下格式的数据框:一列包含原始序列,另一列包含序列发生的次数,以及其他具有其他特征的列。
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来获取行,但是我无法将其恢复为初始数据帧格式,每行具有唯一的序列和序列显示的次数。
谢谢!
答案 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