df <- data.frame(matrix(1:9, 3, 3))
X1 X2 X3
1 1 4 7
2 2 5 8
3 3 6 9
이러한 데이터 프레임이 있다고 할때 새로운 컬럼에 각 인자간의 곱한 값을 자동으로 추가하고 싶습니다.
현재 df 에서 변수가 3개이므로 가능한 곱 조합은 ① X1*X2 ②X1*X3 ③X2*X3 로 세개가 나올 수 있는데, 저 세개의 값들이 새로운 세개의 컬럼에 추가하고 싶습니다.
결과를 본다면 아래와 같겠습니다.
X1 X2 X3 New1 New2 New3
1 1 4 7 4 7 28
2 2 5 8 10 16 40
3 3 6 9 18 27 54
for loop를 사용해서 해보고는 있는데 쉽지가 않네요.. 도와주시면 상당히 감사하겠습니다.
Comment 2
-
cardiomoon
2018.01.30 16:36
> df <- data.frame(matrix(1:27, 3, 9))> dfX1 X2 X3 X4 X5 X6 X7 X8 X91 1 4 7 10 13 16 19 22 252 2 5 8 11 14 17 20 23 263 3 6 9 12 15 18 21 24 27> x=combn(colnames(df),2)> x[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15][1,] "X1" "X1" "X1" "X1" "X1" "X1" "X1" "X1" "X2" "X2" "X2" "X2" "X2" "X2" "X2"[2,] "X2" "X3" "X4" "X5" "X6" "X7" "X8" "X9" "X3" "X4" "X5" "X6" "X7" "X8" "X9"[,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26] [,27] [,28][1,] "X3" "X3" "X3" "X3" "X3" "X3" "X4" "X4" "X4" "X4" "X4" "X5" "X5"[2,] "X4" "X5" "X6" "X7" "X8" "X9" "X5" "X6" "X7" "X8" "X9" "X6" "X7"[,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36][1,] "X5" "X5" "X6" "X6" "X6" "X7" "X7" "X8"[2,] "X8" "X9" "X7" "X8" "X9" "X8" "X9" "X9"> for(i in 1:ncol(x)){+ newname=stringr::str_c(x[,i],collapse="")+ df[[newname]]=df[[x[1,i]]]*df[[x[2,i]]]+ }> dfX1 X2 X3 X4 X5 X6 X7 X8 X9 X1X2 X1X3 X1X4 X1X5 X1X6 X1X7 X1X8 X1X9 X2X3 X2X4 X2X51 1 4 7 10 13 16 19 22 25 4 7 10 13 16 19 22 25 28 40 522 2 5 8 11 14 17 20 23 26 10 16 22 28 34 40 46 52 40 55 703 3 6 9 12 15 18 21 24 27 18 27 36 45 54 63 72 81 54 72 90X2X6 X2X7 X2X8 X2X9 X3X4 X3X5 X3X6 X3X7 X3X8 X3X9 X4X5 X4X6 X4X7 X4X8 X4X9 X5X6 X5X71 64 76 88 100 70 91 112 133 154 175 130 160 190 220 250 208 2472 85 100 115 130 88 112 136 160 184 208 154 187 220 253 286 238 2803 108 126 144 162 108 135 162 189 216 243 180 216 252 288 324 270 315X5X8 X5X9 X6X7 X6X8 X6X9 X7X8 X7X9 X8X91 286 325 304 352 400 418 475 5502 322 364 340 391 442 460 520 5983 360 405 378 432 486 504 567 648 -
kenny
2018.02.01 10:40
감사합니다 교수님. 상당한 도움이 되었습니다.