[問題] combn取法(一定要包含1)

看板R_Language作者 (getsimple)時間4年前 (2020/10/16 02:22), 編輯推噓8(8024)
留言32則, 7人參與, 4年前最新討論串1/1
[問題類型]: 程式諮詢(我想用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

10/16 02:35, 4年前 , 1F
你可以想像每一個位置有 True 和 False 兩種可能
10/16 02:35, 1F

10/16 02:37, 4年前 , 2F
1 可以看成 T F F F F,1, 2 可以看成 T T F F F
10/16 02:37, 2F

10/16 02:38, 4年前 , 3F
問題就變成如何產生所以的 T/F 組合,可以以此試試看
10/16 02:38, 3F

10/16 09:02, 4年前 , 4F

10/16 10:25, 4年前 , 5F
硬上就是在內層for中再包一個if (1 %in% i_Combn[, j])
10/16 10:25, 5F

10/16 11:32, 4年前 , 6F
為什麼不把1以外的column做完全組合後,再跟1 column結合?
10/16 11:32, 6F

10/16 12:55, 4年前 , 7F
用expand.grid即可
10/16 12:55, 7F

10/16 13:20, 4年前 , 8F
G大,這個我有用過,但我底下要做迭代運算,如果用取
10/16 13:20, 8F

10/16 13:20, 4年前 , 9F
資料的方式,會更方便~謝謝你提供的想法
10/16 13:20, 9F

10/16 13:20, 4年前 , 10F
l大,感謝你!!我想要的就是這樣~
10/16 13:20, 10F

10/16 13:21, 4年前 , 11F
a大跟r大,我再試試看,感恩~
10/16 13:21, 11F

10/16 13:23, 4年前 , 12F
k大,因為這樣會有重複,譬如說1 3 5如果跟1結合,會
10/16 13:23, 12F

10/16 13:23, 4年前 , 13F
變成 1 1 3 5,但我只要1 3 5
10/16 13:23, 13F

10/16 15:30, 4年前 , 14F
我想樓上k大的意思應該是像這樣 https://i.imgur.com/lTZra
10/16 15:30, 14F

10/16 15:30, 4年前 , 15F
1r.jpeg
10/16 15:30, 15F

10/16 15:30, 4年前 , 16F

10/16 15:33, 4年前 , 17F
再把1黏到每個元素的第一個阿捏,不過list裡面的matrix我不
10/16 15:33, 17F

10/16 15:33, 4年前 , 18F
是很會處理這種結構(苦手),希望其他高手可以補充>"<
10/16 15:33, 18F

10/16 17:09, 4年前 , 19F
了解,感謝教學,其實我也不太會處理這種哈哈,遇到我
10/16 17:09, 19F

10/16 17:09, 4年前 , 20F
都寫迴圈...不過就會變成一堆迴圈,因為我目前就是這
10/16 17:09, 20F

10/16 17:09, 4年前 , 21F
樣...做這個組合的目的只是要取list裡面的data,我的
10/16 17:09, 21F

10/16 17:09, 4年前 , 22F
用途是取位置用的,但變成要用for去取data裡頭的x(因
10/16 17:09, 22F

10/16 17:09, 4年前 , 23F
為資料型態是list)
10/16 17:09, 23F

10/16 19:08, 4年前 , 24F
loop沒什麼不好,頂多比較難看。你可以額外練習記憶體
10/16 19:08, 24F

10/16 19:08, 4年前 , 25F
預分配的技巧。
10/16 19:08, 25F

10/16 19:10, 4年前 , 26F
推薦閱讀本板#1LjDrSmd
10/16 19:10, 26F

10/16 22:41, 4年前 , 27F
a大,謝謝,馬上來看看
10/16 22:41, 27F

10/16 22:52, 4年前 , 28F
combn(5,1);combn(5,2);combn(5,3);combn(5,4);然後
10/16 22:52, 28F

10/16 22:52, 4年前 , 29F
取裡面有1的
10/16 22:52, 29F

10/17 17:56, 4年前 , 30F
r大,了解,謝謝~
10/17 17:56, 30F

10/17 20:56, 4年前 , 31F
是不是可以順便再搭配apply?
10/17 20:56, 31F

10/23 19:09, 4年前 , 32F
跑一個迴圈,把沒有1的丟掉,會不會比較簡單?
10/23 19:09, 32F
文章代碼(AID): #1VY9DYyT (R_Language)
文章代碼(AID): #1VY9DYyT (R_Language)