看板 R_Language 關於我們 聯絡資訊
如題 [問題類型]: 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
locka: 不需要group_by()啊,直接 mutate()就好10/13 11:32
rebe212296: 我是想問,如果有24欄中任選2欄,難道要一對一對打出10/13 11:55
rebe212296: 來嗎10/13 11:55
※ 編輯: rebe212296 (223.137.119.66 臺灣), 10/13/2020 11:57:37 ※ 編輯: rebe212296 (223.137.119.66 臺灣), 10/13/2020 11:59:02
locka: 你的意思是想把所有的排列組合都mutate出來嗎 (c1*c2, c1*c10/13 12:05
locka: 3…c1*24… and so on?)10/13 12:05
rebe212296: 就是col1*col2存product12,col2*col3存product23,總10/13 12:09
rebe212296: 共存C_2^24種組合10/13 12:09
rebe212296: 對10/13 12:09
rebe212296: 共有23+22+...+1種10/13 12:14
※ 編輯: rebe212296 (223.137.119.66 臺灣), 10/13/2020 12:17:26 ※ 編輯: rebe212296 (223.137.119.66 臺灣), 10/13/2020 12:17:56
hank830214: 我目前想到可以用combn()求出所有組合10/13 12:23
hank830214: 再搭配eval()+parse()把文字當作程式碼執行10/13 12:23
hank830214: http://tinyurl.com/y5sks49a10/13 12:25
clickhere: x<-t(data)%*%data;x[lower.tri(x)]10/13 12:50
andrew43: 一樣也是先想到combn() https://ideone.com/lHdXPe10/13 12:50
謝謝,可是apply出來是list希望變成data.frame
locka: expand.grid的方法供參 https://i.imgur.com/oreH24D.jpg10/13 13:51
locka: 但樓上a大的方法比較好~ 學習了!!10/13 13:51
locka: 而且用expand.grid不能刪除重複還要再想辦法把結果轉回colu10/13 13:59
locka: mn 啊啊啊好麻煩好麻煩(吐槽自己是哪招XD)10/13 13:59
rebe212296: 謝謝各位 10/13 16:20
※ 編輯: rebe212296 (223.137.119.66 臺灣), 10/13/2020 16:21:57
andrew43: 我的res並不是list而是matrix, 可再用as.data.frame。10/13 17:43
回應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
andrew43: 我的確沒考慮預先有欄名。 10/13 20:44