matrixdata.frame의 조작

  • apply(), sweep(), 그리고 outer()는 매트릭스와 동작
  • tapply()는 그룹화할때 사용

matrix와 array

a = matrix(1:20, nrow=5)
a
##      [,1] [,2] [,3] [,4]
## [1,]    1    6   11   16
## [2,]    2    7   12   17
## [3,]    3    8   13   18
## [4,]    4    9   14   19
## [5,]    5   10   15   20
  • apply
apply(a, 1, mean)
## [1]  8.5  9.5 10.5 11.5 12.5
apply(a, 2, mean)
## [1]  3  8 13 18

x = matrix(rnorm(20, mean=0, sd=10), nrow=4)
x
##            [,1]         [,2]         [,3]      [,4]      [,5]
## [1,]  -9.934007  0.006597635  -3.84921296  6.084250  6.165411
## [2,] -20.017956  1.991361506  -7.30670901  5.212370 -9.884440
## [3,]  -5.166649 -9.524993094  -0.08221195  3.766401 12.265300
## [4,]   6.278801 -2.190847659 -15.43569788 11.086988  4.038638
  • sweep()
# apply로 최솟값을 구한 후 각 원소에서 최솟값을 뺀다.
x1 = sweep(x, 1, apply(x, 1, min), `-`) 
x1
##           [,1]      [,2]      [,3]     [,4]     [,5]
## [1,]  0.000000  9.940604  6.084794 16.01826 16.09942
## [2,]  0.000000 22.009317 12.711247 25.23033 10.13352
## [3,]  4.358344  0.000000  9.442781 13.29139 21.79029
## [4,] 21.714499 13.244850  0.000000 26.52269 19.47434
# 최솟값을 뺀 후 각행을 최대값을 나눈다.
# 이는 python의 scikit-learn의 MinMaxScaler()와 같은 전처리와 같다.
x2 = sweep(x1, 1, apply(x, 1, max), `/`) 
x2
##           [,1]     [,2]      [,3]     [,4]     [,5]
## [1,] 0.0000000 1.612318 0.9869242 2.598084 2.611248
## [2,] 0.0000000 4.222517 2.4386695 4.840471 1.944128
## [3,] 0.3553394 0.000000 0.7698777 1.083658 1.776581
## [4,] 1.9585570 1.194630 0.0000000 2.392235 1.756504

  • outer()
# 첫번째 열에 1:3을 채우고, 첫번째 행에 1:10 까지 채운다
# 그리고 나머지 원소는 "*"를 이용하여 곱한 원소로 채운다
outer(1:3, 1:10, "*")
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,]    1    2    3    4    5    6    7    8    9    10
## [2,]    2    4    6    8   10   12   14   16   18    20
## [3,]    3    6    9   12   15   18   21   24   27    30

'R > functional' 카테고리의 다른 글

parallelize  (0) 2018.06.06
lapply  (0) 2018.06.06

+ Recent posts