看板 R_Language 關於我們 聯絡資訊
[問題類型]: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) [軟體熟悉度]: 新手(沒寫過程式,R 是我的第一次) [問題敘述]: 我目前想要取data的columns 然後做所有的組合 但一定都要包含第一個column 目前code如下: N <- 5 Model = list() C <- 1 for(i in 1:N){ i_Combn <- combn(N, i) for(j in 1:choose(N, i)){ Model[[C]] <- i_Combn[, j] C <- C + 1 } } Model 結果為: https://i.imgur.com/X8VspIL.jpg
但我今天想要的結果一定要包含1 也就是我想要得到的結果是: 1 1 2 1 3 1 4 1 5 1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 1 2 3 4 1 2 3 5 1 2 4 5 1 3 4 5 1 2 3 4 5 想了很久都弄不出來 拜託大家幫幫我 非常感謝 [關鍵字]: Combn、排列組合 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.52.38.63 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1602786146.A.F1D.html
Gjerry: 你可以想像每一個位置有 True 和 False 兩種可能 10/16 02:35
Gjerry: 1 可以看成 T F F F F,1, 2 可以看成 T T F F F 10/16 02:37
Gjerry: 問題就變成如何產生所以的 T/F 組合,可以以此試試看 10/16 02:38
locka: https://ideone.com/AjvqJm 10/16 09:02
andrew43: 硬上就是在內層for中再包一個if (1 %in% i_Combn[, j]) 10/16 10:25
khaos: 為什麼不把1以外的column做完全組合後,再跟1 column結合? 10/16 11:32
rebe212296: 用expand.grid即可 10/16 12:55
getsimple: G大,這個我有用過,但我底下要做迭代運算,如果用取 10/16 13:20
getsimple: 資料的方式,會更方便~謝謝你提供的想法 10/16 13:20
getsimple: l大,感謝你!!我想要的就是這樣~ 10/16 13:20
getsimple: a大跟r大,我再試試看,感恩~ 10/16 13:21
getsimple: k大,因為這樣會有重複,譬如說1 3 5如果跟1結合,會 10/16 13:23
getsimple: 變成 1 1 3 5,但我只要1 3 5 10/16 13:23
locka: 我想樓上k大的意思應該是像這樣 https://i.imgur.com/lTZra 10/16 15:30
locka: 1r.jpeg 10/16 15:30
locka: https://i.imgur.com/lTZra1r.jpeg 10/16 15:30
locka: 再把1黏到每個元素的第一個阿捏,不過list裡面的matrix我不 10/16 15:33
locka: 是很會處理這種結構(苦手),希望其他高手可以補充>"< 10/16 15:33
getsimple: 了解,感謝教學,其實我也不太會處理這種哈哈,遇到我 10/16 17:09
getsimple: 都寫迴圈...不過就會變成一堆迴圈,因為我目前就是這 10/16 17:09
getsimple: 樣...做這個組合的目的只是要取list裡面的data,我的 10/16 17:09
getsimple: 用途是取位置用的,但變成要用for去取data裡頭的x(因 10/16 17:09
getsimple: 為資料型態是list) 10/16 17:09
andrew43: loop沒什麼不好,頂多比較難看。你可以額外練習記憶體 10/16 19:08
andrew43: 預分配的技巧。 10/16 19:08
andrew43: 推薦閱讀本板#1LjDrSmd 10/16 19:10
getsimple: a大,謝謝,馬上來看看 10/16 22:41
rebe212296: combn(5,1);combn(5,2);combn(5,3);combn(5,4);然後 10/16 22:52
rebe212296: 取裡面有1的 10/16 22:52
getsimple: r大,了解,謝謝~ 10/17 17:56
khaos: 是不是可以順便再搭配apply? 10/17 20:56
TOOYA: 跑一個迴圈,把沒有1的丟掉,會不會比較簡單? 10/23 19:09