根据R

时间:2017-10-26 14:04:17

标签: r

我在数据表中有大约1,100万行的大型数据集。我想基于多个条件生成随机的行样本。下面是具有所需输出的样本数据集。

Var  Code  Count_Curr        res
1     146   1649             0.05
1     147   1649             0.05
1     148   1649             0.1
1     149   1649             0.06
1     150   1649             0.01
1     151   1649             0.1
1     152   1649             0.06
1     153   1649             0.1
2     146   1649             0.05
2     147   1649             0.05
2     148   1649             0.1
2     149   1649             0.06
2     150   1649             0.01
2     151   1649             0.1
2     152   1649             0.06
2     153   1649             0.1
3     146   1649             0.05
3     147   1649             0.05
3     148   1649             0.1
3     149   1649             0.06
3     150   1649             0.01
3     151   1649             0.1
3     152   1649             0.06
3     153   1649             0.1

采样后我想要的输出应该像

Var  Code  Count_Curr        res
1     146   1649             0.05
1     147   1649             0.1
1     146   1649             0.06
2     146   1649             0.05
2     147   1649             0.1
2     146   1649             0.06
3     146   1649             0.05
3     147   1649             0.1
3     146   1649             0.06

我想从每个“var”中选择5或10个代码,它还应覆盖“var”可用的所有“res”。

2 个答案:

答案 0 :(得分:0)

我不确定这是否是您想要的,但可能使用caret包和createDataPartition函数,以使Var频率与原始数据框类似:

选择10%的行:

indexes <- createDataPartition(df$var,times = 1,p = 0.1,list = FALSE)
df.sample <- df[indexes,]

答案 1 :(得分:0)

我认为这可以使用dplyr包来实现。

dat%&gt;%group_by(Var,res)%&gt;%sample_n(5,replace = FALSE)

依赖于每个{Var res}组合有5行;如果情况并非如此,那么您需要指定在这种情况下您想要发生的事情。

编辑 - 重新阅读,如果特定Var中存在多于或少于5个不同的res,则需要采用不同的方法。事情并不十分清楚,但你可能会取得一些可行的事情来取代“&#39; 5&#39;用&#39; 1&#39;在上面的代码中。