→ sinclairJ: 謝謝大大~已解決 10/14 11:20
※ 引述《sinclairJ (SunnyGymBoy)》之銘言:
: 實際資料為200列*50欄
: 要對每列資料隨機刪除該列的幾個欄
: 例如將第一列(筆)資料的第5,34,41欄刪除
: 將第二列(筆)資料的第4,25,36,49,50欄刪除
: 將第三列(筆)資料的第28,39欄刪除....到第兩百列
: 每列(筆)資料刪除的欄數目和位置都是隨機的,因此每列(筆)都不一樣,所以最後20
: 0筆資料,其每筆所剩的欄位都會不太一樣
: (刪掉的欄位也不用na取代)
: 這邊有個示意圖舉例
: (刪除前:3*10維度)
: 20,14,63,15,74,95,25,10,41,12
: 25,47,80,96,15,44,08,35,18,30
: 18,36,59,54,14,22,70,98,13,24
: (刪除後希望變這樣)
: 20,14,15,74,95,10,41
: 25,80,96,15,44,08,18,30
: 18,59,54,14,70,24
: 謝謝各位前輩的指導
: 小弟感激不進
: 若問題描述的不夠清楚我再補充
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.128.117.75
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1444298495.A.6EB.html
# 製造假資料
n.row <- 200 ; n.col <- 50
mat <- matrix(1 : (n.row * n.col), n.row, byrow = T)
# matrix 轉 list
x <- split(mat, rep(1:n.row, n.col))
# 利用 lapply() 逐列工作
# 工作內容是在 1:n.col 中抽 round(Uniform(20,40)) 個數字
# 沒抽中的就不要了
# 回傳還是個 list
lapply(x, function(k){
k[sample(1:50, round(runif(1,1,20)))]
})