随机在R中使用if-else条件进行采样

时间:2016-04-13 10:03:14

标签: r random-sample

给出表格中的数据框:

toString()

我希望随机抽取每个 0: new #16 // class java/lang/Integer 3: dup 4: bipush 42 6: invokespecial #18 // Method java/lang/Integer."<init>":(I)V 9: astore_1 10: getstatic #21 // Field java/lang/System.out:Ljava/io/PrintStream; 13: aload_1 14: invokevirtual #27 // --> Method java/io/PrintStream.println:(Ljava/lang/Object;)V 17: return 中的group val A 10 A 1 B 9 C 6 ... ,并将新数据框作为结果。问题是每个valgroup的数量不同,因此我无法直接使用val。现在,我想确定group条件下的样本数量:如果sample()的数量高于,请说3,则为if-else s被抽样。否则,所有val都被视为样本。我怎样才能做到这一点?提前谢谢!

1 个答案:

答案 0 :(得分:2)

我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(df)),按'group'分组,我们得到{val'的sample

library(data.table)
setDT(df)[, .(val=sample(val)), by = group]

如果我们需要添加一个条件,使得if nrow大于3,sample 3个值或else所有值。

setDT(df)[, if(.N >3 ) sample(val, 3, replace=FALSE) else sample(val), by = group]