作者rebe212296 (绿豆冰)
看板R_Language
标题[问题] 用dplyr做任两column相乘
时间Tue Oct 13 09:43:59 2020
如题
[问题类型]:
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://webptt.com/cn.aspx?n=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
1F:→ locka: 不需要group_by()啊,直接 mutate()就好10/13 11:32
2F:→ rebe212296: 我是想问,如果有24栏中任选2栏,难道要一对一对打出10/13 11:55
3F:→ 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
4F:→ locka: 你的意思是想把所有的排列组合都mutate出来吗 (c1*c2, c1*c10/13 12:05
5F:→ locka: 3…c1*24… and so on?)10/13 12:05
6F:→ rebe212296: 就是col1*col2存product12,col2*col3存product23,总10/13 12:09
7F:→ rebe212296: 共存C_2^24种组合10/13 12:09
8F:→ rebe212296: 对10/13 12:09
9F:→ 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
10F:→ hank830214: 我目前想到可以用combn()求出所有组合10/13 12:23
11F:→ hank830214: 再搭配eval()+parse()把文字当作程式码执行10/13 12:23
13F:→ clickhere: x<-t(data)%*%data;x[lower.tri(x)]10/13 12:50
谢谢,可是apply出来是list希望变成data.frame
16F:→ locka: 但楼上a大的方法比较好~ 学习了!!10/13 13:51
17F:→ locka: 而且用expand.grid不能删除重复还要再想办法把结果转回colu10/13 13:59
18F:→ locka: mn 啊啊啊好麻烦好麻烦(吐槽自己是哪招XD)10/13 13:59
19F:→ rebe212296: 谢谢各位 10/13 16:20
※ 编辑: rebe212296 (223.137.119.66 台湾), 10/13/2020 16:21:57
20F:→ 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
21F:推 andrew43: 我的确没考虑预先有栏名。 10/13 20:44