[問題] 用dplyr做任兩column相乘

看板R_Language作者 (綠豆冰)時間3年前 (2020/10/13 09:44), 3年前編輯推噓2(2019)
留言21則, 5人參與, 3年前最新討論串1/1
如題 [問題類型]: dplyr套件 [軟體熟悉度]: 一年 [問題敘述]: 我的問題在於如何任選2個欄位做運算,以一行程式表示 目前data這個資料集有24欄,我在想是否有方法可以不要打23+22+…+1=276行程式 col1~col24 任2欄相乘 [程式範例]: data %>%group_by(col1,col2)%>%mutate(product=col1*col2) [環境敘述]: R 3.6.0 [關鍵字]: 選擇性,也許未來有用 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.137.119.66 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1602553441.A.AA9.html ※ 編輯: rebe212296 (223.137.119.66 臺灣), 10/13/2020 09:44:32 ※ 編輯: rebe212296 (223.137.119.66 臺灣), 10/13/2020 09:45:37

10/13 11:32, 3年前 , 1F
不需要group_by()啊,直接 mutate()就好
10/13 11:32, 1F

10/13 11:55, 3年前 , 2F
我是想問,如果有24欄中任選2欄,難道要一對一對打出
10/13 11:55, 2F

10/13 11:55, 3年前 , 3F
來嗎
10/13 11:55, 3F
※ 編輯: rebe212296 (223.137.119.66 臺灣), 10/13/2020 11:57:37 ※ 編輯: rebe212296 (223.137.119.66 臺灣), 10/13/2020 11:59:02

10/13 12:05, 3年前 , 4F
你的意思是想把所有的排列組合都mutate出來嗎 (c1*c2, c1*c
10/13 12:05, 4F

10/13 12:05, 3年前 , 5F
3…c1*24… and so on?)
10/13 12:05, 5F

10/13 12:09, 3年前 , 6F
就是col1*col2存product12,col2*col3存product23,總
10/13 12:09, 6F

10/13 12:09, 3年前 , 7F
共存C_2^24種組合
10/13 12:09, 7F

10/13 12:09, 3年前 , 8F
10/13 12:09, 8F

10/13 12:14, 3年前 , 9F
共有23+22+...+1種
10/13 12:14, 9F
※ 編輯: rebe212296 (223.137.119.66 臺灣), 10/13/2020 12:17:26 ※ 編輯: rebe212296 (223.137.119.66 臺灣), 10/13/2020 12:17:56

10/13 12:23, 3年前 , 10F
我目前想到可以用combn()求出所有組合
10/13 12:23, 10F

10/13 12:23, 3年前 , 11F
再搭配eval()+parse()把文字當作程式碼執行
10/13 12:23, 11F

10/13 12:25, 3年前 , 12F

10/13 12:50, 3年前 , 13F
x<-t(data)%*%data;x[lower.tri(x)]
10/13 12:50, 13F

10/13 12:50, 3年前 , 14F
一樣也是先想到combn() https://ideone.com/lHdXPe
10/13 12:50, 14F
謝謝,可是apply出來是list希望變成data.frame

10/13 13:51, 3年前 , 15F
expand.grid的方法供參 https://i.imgur.com/oreH24D.jpg
10/13 13:51, 15F

10/13 13:51, 3年前 , 16F
但樓上a大的方法比較好~ 學習了!!
10/13 13:51, 16F

10/13 13:59, 3年前 , 17F
而且用expand.grid不能刪除重複還要再想辦法把結果轉回colu
10/13 13:59, 17F

10/13 13:59, 3年前 , 18F
mn 啊啊啊好麻煩好麻煩(吐槽自己是哪招XD)
10/13 13:59, 18F

10/13 16:20, 3年前 , 19F
謝謝各位
10/13 16:20, 19F
※ 編輯: rebe212296 (223.137.119.66 臺灣), 10/13/2020 16:21:57

10/13 17:43, 3年前 , 20F
我的res並不是list而是matrix, 可再用as.data.frame。
10/13 17:43, 20F
回應andrew43大,我後來發現資料如果已經有colnames,將它改為向量,vn<-as.vector( names(data)),可以再用cvn<-combn(x=vn,m=2) names(cn)<-paste(cvn[1,],cvn[2,],sep="_") ※ 編輯: rebe212296 (223.137.119.66 臺灣), 10/13/2020 19:22:40

10/13 20:44, 3年前 , 21F
我的確沒考慮預先有欄名。
10/13 20:44, 21F
文章代碼(AID): #1VXGPXgf (R_Language)
文章代碼(AID): #1VXGPXgf (R_Language)