给出表格中的数据框:
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
...
,并将新数据框作为结果。问题是每个val
中group
的数量不同,因此我无法直接使用val
。现在,我想确定group
条件下的样本数量:如果sample()
的数量高于,请说3,则为if-else
s被抽样。否则,所有val
都被视为样本。我怎样才能做到这一点?提前谢谢!
答案 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]