[英]Randomly sample with if-else condition in R
給定以下形式的數據框:
group val
A 10
A 1
B 9
C 6
...
我想隨機采樣每個group
的val
,結果是一個新的數據框。 問題是每個group
中val
的數量不同,所以我不能直接使用sample()
。 現在,我想在if-else
條件下確定樣本大小:如果val
的數量大於(比如說3),則對三個val
進行采樣。 否則,所有的val
被作為樣本。 我怎樣才能做到這一點? 先感謝您!
我們可以使用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
sample
所有值。
setDT(df)[, if(.N >3 ) sample(val, 3, replace=FALSE) else sample(val), by = group]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.