随机抽样而不替换另一个变量中的一个变量:在{plyr}包中使用ddply()functin - R

时间:2016-06-13 21:38:01

标签: r random permutation plyr bigdata

我一直在努力解决这个问题,并且看不到任何权宜之计。

我有一个数据集,我试图在另一个变量(一个位置)中置换一个变量(一个属性),而不管一个对象(一个项目)。

以下是数据摘录:

         ID_FIELD   SPCD       Total
              1177   833  428.286591
             11383   691 1175.846712
             24081   316  137.042979
             11383   318  177.335481
              1177    71  166.629921
             24081   110 1170.012216
              1177    12    8.379811
             30284   541  585.039300
             24081   746  188.808428
             24081   531  196.142482
              1177   111   47.258113
              1177    12  198.443376
             11383   827   16.095224

使用ddply()包中的plyr函数,使用R版本3.2.0,我已提交以下代码:

ddply(data,.(Total,ID_FIELD),sample)

在这里,我尝试在Total(该位置)内的SPCD(项目)上以及在运行ID_FIELD代码两次之后置换ddply()(属性)顺序,结果与以前完全相同,这不是我想要的。我希望这个过程在每次运行函数时都是随机的(即Total每次提交ddply()的新的随机播放)。

有关如何完成此任务的任何线索?考虑到应用程序具有大型数据集,也可以理解快速的过程。我在我的智慧结束。

非常感谢。

1 个答案:

答案 0 :(得分:2)

使用plyr:

ddply(data, .(ID_FIELD), function(df) df[sample(nrow(df)),])

使用dplyr,它提供了一个采样函数:

library(dplyr)
data %>% group_by(ID_FIELD) %>% sample_frac