dat <- data.frame(
V1=c(1,3,4,NA,NA,NA,NA,NA,NA),
V2=c(2,5,6,8,9,12,NA,NA,NA),
V3=c(7,10,11,20,23,38,40,41,50)
)
apply(dat, 2, function(x, ratio = 1/3){
# 本欄哪些不是 NA
thisCol.is.not.NA <- !is.na(x)
# 本欄可抽幾次
thisCol.length <- round(sum(thisCol.is.not.NA) * ratio)
# 把抽出的傳出去
return(sample(x[thisCol.is.not.NA], thisCol.length))
})
其實和 C 板主寫的是一樣的,幫填註解而已。
※ 引述《gbd37 (有夠瞎)》之銘言:
: [問題類型]:
: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
: [軟體熟悉度]:
: 入門(寫過其他程式,只是對語法不熟悉)
: [問題敘述]:
: 想要使用apply函數來抽樣,依"比例"抽每行裡所含有的數
: 範例是我舉例的資料,第一行只有3個數字,第二行6個,第三行9個
: 我想依1/3的比例在第一行抽1個數字,第二行抽2個,第三行抽3個
: 但就在size那格我不知道該怎麼打,麻煩指導
: 謝謝
: [程式範例]:
: http://pastie.org/10548085
: [關鍵字]:
: apply sample