2. 전처리 2

2.1 행/열의 계산 - apply 계열 함수

  • 입력된 데이터 전체에 같은 계산을 수행하게 하는 함수로 apply 계열의 함수가 있다. 이들은 벡터 연산을 수행하므로 결과를 빠르게 도출한다.

2.1.1 apply()

  • 행 또는 열 방향으로 계산한다.
  • 열 방향 계산을 수행했고, 결과는 열방향으로 저정되었다.
  • 입력데이터는 행렬이고 결과는 벡터로 출력

1.기본법 사용법

m <- matrix(1:9, ncol = 3); m
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
apply(m, 2, sqrt)   # 특별한 이유가 없으면 2를 입력한다.
##          [,1]     [,2]     [,3]
## [1,] 1.000000 2.000000 2.645751
## [2,] 1.414214 2.236068 2.828427
## [3,] 1.732051 2.449490 3.000000
  • 행 방향 계산을 수행하여도 결과는 열 방향으로 저장된다.
m <- matrix(1:9, ncol = 3); m
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
apply(m, 1, sqrt) 
##          [,1]     [,2]     [,3]
## [1,] 1.000000 1.414214 1.732051
## [2,] 2.000000 2.236068 2.449490
## [3,] 2.645751 2.828427 3.000000
  1. apply 함수와 사용자 정의 함수의 결합
  • function 함수
say <- function() {
  print("당신이 입력한 문장은 아래와 같습니다")
  print(s)
}


final.score <- function(name, current.score) {
  print(name)
  print(past("your final score :", current.score +2))
}
  • if 문
a <- 3
if(a == 3) {
  print("3입니다")
}
## [1] "3입니다"
if(a == 3) {
  print("3입니다")
} else {
  print(a)
}
## [1] "3입니다"
a <- 4
if(a == 3){ 
  print("3입니다")
}else if (a == 2) {
  print("2입니다")
}else {
  print(a)
}
## [1] 4
  • for문
for(i in 1:10) {
  print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
x <- c(1:10)
for(i in x) {
  print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
for(i in i:length(x)) {
  print(x)
}
##  [1]  1  2  3  4  5  6  7  8  9 10
  • 사용자 정의 함수와의 연계 -아규먼트 1개 있는 경우
m <- matrix(1:9, ncol = 3); m
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
my.func1 <- function(m) {
  m^2-2*m+3
}

apply(m, 2, my.func1)    #열 방향
##      [,1] [,2] [,3]
## [1,]    2   11   38
## [2,]    3   18   51
## [3,]    6   27   66
apply(m, 1, my.func1)    #행 방향
##      [,1] [,2] [,3]
## [1,]    2    3    6
## [2,]   11   18   27
## [3,]   38   51   66
  • 아규먼트가 2개 있는 경우
my.func2 <- function(m, arg) {
  m+arg
}

apply(m, 2, my.func2, 4) # 열 방향
##      [,1] [,2] [,3]
## [1,]    5    8   11
## [2,]    6    9   12
## [3,]    7   10   13
apply(m, 1, my.func2, 4) # 행 방향
##      [,1] [,2] [,3]
## [1,]    5    6    7
## [2,]    8    9   10
## [3,]   11   12   13
  • 아규먼트가 3개 있는 경우
my.func3 <- function(m, arg1, arg2) {
  m + arg1 + arg2
}

apply(m, 2, my.func3, 2, 3)  # 열 방향
##      [,1] [,2] [,3]
## [1,]    6    9   12
## [2,]    7   10   13
## [3,]    8   11   14
apply(m, 1, my.func3, 2, 3)  # 행 방향
##      [,1] [,2] [,3]
## [1,]    6    7    8
## [2,]    9   10   11
## [3,]   12   13   14
  • 기초 통계 함수와의 연계
apply(m, 2, sum)
## [1]  6 15 24
apply(m, 1, sum)
## [1] 12 15 18
  • 행과 열의 합과 평균 계산은 이에 특화된 함수들이 별도로 존재한다
  • rowSums(), rowMeans(), colSums(), colMeans() 등의 colSums 계열 함수
apply(iris[,1:4], 2, sum) # 아이리스 데이터 열 방향 
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
##        876.5        458.6        563.7        179.9
colSums(iris[, 1:4])
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
##        876.5        458.6        563.7        179.9
colMeans(iris[, 1:4])
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
##     5.843333     3.057333     3.758000     1.199333

2.1.2 lapply()

  • 데이터의 각 요소에 특정 함수를 적용
  • 입력 데이터 : 벡터, 데이터 프레임
  • 결과 데이터 : 리스트
  1. 기본 사용법
l <- lapply(iris[, 1:4], mean); l
## $Sepal.Length
## [1] 5.843333
## 
## $Sepal.Width
## [1] 3.057333
## 
## $Petal.Length
## [1] 3.758
## 
## $Petal.Width
## [1] 1.199333
v <- unlist(l); l                  # 리스트를 벡터로 변환
## $Sepal.Length
## [1] 5.843333
## 
## $Sepal.Width
## [1] 3.057333
## 
## $Petal.Length
## [1] 3.758
## 
## $Petal.Width
## [1] 1.199333
class(v)
## [1] "numeric"
m <- matrix(v, ncol = 4);m         # 처음 구조처럼 4개 컬럼자리 행렬로 변환
##          [,1]     [,2]  [,3]     [,4]
## [1,] 5.843333 3.057333 3.758 1.199333
d <- as.data.frame(m);d            # 행렬을 데이터 프레임으로 변환
##         V1       V2    V3       V4
## 1 5.843333 3.057333 3.758 1.199333
names(d) <- names(iris[, 1:4]); d  # 원 데이터 프레임의 이름으로 결과에 이름 부여
##   Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1     5.843333    3.057333        3.758    1.199333

lapply 연습

  • sum은 단일값이 sqrt은 복수값이 나온다
head(lapply(iris[, 1:2], sqrt))
lapply(iris[, 1:2], sum)
m=matrix(1:9,ncol=3)
df=as.data.frame(m)
df
##   V1 V2 V3
## 1  1  4  7
## 2  2  5  8
## 3  3  6  9
l1=lapply(df,my.func1)
l2=lapply(df,my.func2,1)
l3=lapply(df,my.func3,2,1)

v1=unlist(l1)
v2=unlist(l2)
v3=unlist(l3)

v1[v1==5]
## named numeric(0)
v2[v2==5]
## V21 
##   5
x <- c(1,2,3,4,5)

for(i in x) {
  if (i == 5) {
   print(i) 
  } else if (i != 5){
  print(".") 
    }
}
## [1] "."
## [1] "."
## [1] "."
## [1] "."
## [1] 5
v3[v3==5]  
## V12 
##   5

2.1.3 sapply()

  • 입력데이터의 각 요소마다 계산한다
  • 입력 데이터 : 벡터, 데이터프레임, 리스트
  • 결과 데이터 : 벡터, 행렬
  • 데이터 프레임의 경우에는 열 뱡향으로만 계산한다.
x <- 1:3
sapply(x, sqrt)
## [1] 1.000000 1.414214 1.732051
sapply(iris[, 1:2], sum)
## Sepal.Length  Sepal.Width 
##        876.5        458.6
v <- sapply(iris[, 1:4], mean)
v
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
##     5.843333     3.057333     3.758000     1.199333
d <- as.data.frame(v); d
##                     v
## Sepal.Length 5.843333
## Sepal.Width  3.057333
## Petal.Length 3.758000
## Petal.Width  1.199333
d <- t(d);d    # 행과 열을 바꾸는 함수 
##   Sepal.Length Sepal.Width Petal.Length Petal.Width
## v     5.843333    3.057333        3.758    1.199333
  • 행렬로 출력되는 경우
m <- sapply(iris[, 1:2], sqrt)   #각각의 모든 요소에 대하여 sqrt 계산
class(m)
## [1] "matrix"

2.1.4 tapply()

  • 입력데이터에 대하여 기준 컬럼 별로 계산한다.
  • 입력 데이터 : 벡터
  • 결과 데이터 : 배열
id <- c(1, 2, 3)
gender <- c("F", "F", "M")
height <- c(160, 165, 170)
df <- data.frame(id, gender, height);df
##   id gender height
## 1  1      F    160
## 2  2      F    165
## 3  3      M    170
tapply(df$height, df$gender, sum)     # gender를 기준으로 삼고 height의 합을 계산
##   F   M 
## 325 170
tapply(df$height, df$gender, sqrt)
## $F
## [1] 12.64911 12.84523
## 
## $M
## [1] 13.0384

연습문제

  1. mtcars 데이터의 변수별 평균을 구하시오.
mtcars
##                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
## Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
## Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
## Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
## Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
## Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
## Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
## Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
## Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
## AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
## Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
## Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
## Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
## Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
## Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
## Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
apply(mtcars, 2, mean)
##        mpg        cyl       disp         hp       drat         wt 
##  20.090625   6.187500 230.721875 146.687500   3.596563   3.217250 
##       qsec         vs         am       gear       carb 
##  17.848750   0.437500   0.406250   3.687500   2.812500
mtcars.1 <- apply(mtcars, 1, mean)[8:14]
mtcars.1
##   Merc 240D    Merc 230    Merc 280   Merc 280C  Merc 450SE  Merc 450SL 
##    24.63455    27.23364    31.86000    31.78727    46.43091    46.50000 
## Merc 450SLC 
##    46.35000
  1. merc~ 차종의 변수별 평균을 구하시오.
apply(mtcars,1,mean)[8:14]
##   Merc 240D    Merc 230    Merc 280   Merc 280C  Merc 450SE  Merc 450SL 
##    24.63455    27.23364    31.86000    31.78727    46.43091    46.50000 
## Merc 450SLC 
##    46.35000
  1. 차종별 모든 행의 합을 구하시오.
rowSums(mtcars)
##           Mazda RX4       Mazda RX4 Wag          Datsun 710 
##             328.980             329.795             259.580 
##      Hornet 4 Drive   Hornet Sportabout             Valiant 
##             426.135             590.310             385.540 
##          Duster 360           Merc 240D            Merc 230 
##             656.920             270.980             299.570 
##            Merc 280           Merc 280C          Merc 450SE 
##             350.460             349.660             510.740 
##          Merc 450SL         Merc 450SLC  Cadillac Fleetwood 
##             511.500             509.850             728.560 
## Lincoln Continental   Chrysler Imperial            Fiat 128 
##             726.644             725.695             213.850 
##         Honda Civic      Toyota Corolla       Toyota Corona 
##             195.165             206.955             273.775 
##    Dodge Challenger         AMC Javelin          Camaro Z28 
##             519.650             506.085             646.280 
##    Pontiac Firebird           Fiat X1-9       Porsche 914-2 
##             631.175             208.215             272.570 
##        Lotus Europa      Ford Pantera L        Ferrari Dino 
##             273.683             670.690             379.590 
##       Maserati Bora          Volvo 142E 
##             694.710             288.890

4.1 lappy()를 이용해 벡터로 변환하시오.

mtcars.l <- lapply(mtcars, sum); mtcars.l
## $mpg
## [1] 642.9
## 
## $cyl
## [1] 198
## 
## $disp
## [1] 7383.1
## 
## $hp
## [1] 4694
## 
## $drat
## [1] 115.09
## 
## $wt
## [1] 102.952
## 
## $qsec
## [1] 571.16
## 
## $vs
## [1] 14
## 
## $am
## [1] 13
## 
## $gear
## [1] 118
## 
## $carb
## [1] 90
unlist(mtcars.1)
##   Merc 240D    Merc 230    Merc 280   Merc 280C  Merc 450SE  Merc 450SL 
##    24.63455    27.23364    31.86000    31.78727    46.43091    46.50000 
## Merc 450SLC 
##    46.35000

4.2 sapply()를 이용해 컬럼 별 합을 구하시오.

mtcasr.s <- sapply(mtcars, sum)

5.1 vs가 0 인 모델과 vs가 1인 모델의 hp 의 평균 차이는

mean <- tapply(mtcars$hp, mtcars$vs, mean)
mean[1] - mean[2]
##        0 
## 98.36508

5.2 기어에 따른 각 모델의 마력

tapply(mtcars$hp, mtcars$gear, mean)
##        3        4        5 
## 176.1333  89.5000 195.6000

2.2 행 병합

2.2.1 행 병합의 필요성

  • 행 합치기는 주로 다음의 두 경우에 사용된다.
    1. 여러 계산 결과를 하나로 묶어야 할 때
    1. 기존 데이터에 행을 추가해야 할 때 ### 2.2.2 rbind()
  • 같은 종류의 원소로 구성되어 있을 때
x <- c(1, 2, 3, 4, 5)
y <- c(10, 20, 30, 40, 50)

d <- data.frame(x, y); d
##   x  y
## 1 1 10
## 2 2 20
## 3 3 30
## 4 4 40
## 5 5 50
rbind(d, c(6, 60))
##   x  y
## 1 1 10
## 2 2 20
## 3 3 30
## 4 4 40
## 5 5 50
## 6 6 60
  • 다른 종류의 원소로 구성되어 있을 때
  • 백터로 만들어서 넣으면, 백터는 한가지 속성밖에 못받기 때문에 전부 캐릭터로 바뀌는 것을 알 수 있다.
d <- rbind(iris, c(1, 2, 3, 4, "setos"))     
## Warning in `[<-.factor`(`*tmp*`, ri, value = "setos"): invalid factor
## level, NA generated
str(d)
## 'data.frame':    151 obs. of  5 variables:
##  $ Sepal.Length: chr  "5.1" "4.9" "4.7" "4.6" ...
##  $ Sepal.Width : chr  "3.5" "3" "3.2" "3.1" ...
##  $ Petal.Length: chr  "1.4" "1.4" "1.3" "1.5" ...
##  $ Petal.Width : chr  "0.2" "0.2" "0.2" "0.2" ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
  • 다른 종류의 원소가 들어가게 하려면 먼저 데이터 프레임으로 만든다.
d1 <- data.frame(Sepal.Length = 1, Sepal.Width = 2, Petal.Length = 3, Petal.Width = 4, Species = "setosa")
d2 <- rbind(iris, d1)
d2
##     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
## 1            5.1         3.5          1.4         0.2     setosa
## 2            4.9         3.0          1.4         0.2     setosa
## 3            4.7         3.2          1.3         0.2     setosa
## 4            4.6         3.1          1.5         0.2     setosa
## 5            5.0         3.6          1.4         0.2     setosa
## 6            5.4         3.9          1.7         0.4     setosa
## 7            4.6         3.4          1.4         0.3     setosa
## 8            5.0         3.4          1.5         0.2     setosa
## 9            4.4         2.9          1.4         0.2     setosa
## 10           4.9         3.1          1.5         0.1     setosa
## 11           5.4         3.7          1.5         0.2     setosa
## 12           4.8         3.4          1.6         0.2     setosa
## 13           4.8         3.0          1.4         0.1     setosa
## 14           4.3         3.0          1.1         0.1     setosa
## 15           5.8         4.0          1.2         0.2     setosa
## 16           5.7         4.4          1.5         0.4     setosa
## 17           5.4         3.9          1.3         0.4     setosa
## 18           5.1         3.5          1.4         0.3     setosa
## 19           5.7         3.8          1.7         0.3     setosa
## 20           5.1         3.8          1.5         0.3     setosa
## 21           5.4         3.4          1.7         0.2     setosa
## 22           5.1         3.7          1.5         0.4     setosa
## 23           4.6         3.6          1.0         0.2     setosa
## 24           5.1         3.3          1.7         0.5     setosa
## 25           4.8         3.4          1.9         0.2     setosa
## 26           5.0         3.0          1.6         0.2     setosa
## 27           5.0         3.4          1.6         0.4     setosa
## 28           5.2         3.5          1.5         0.2     setosa
## 29           5.2         3.4          1.4         0.2     setosa
## 30           4.7         3.2          1.6         0.2     setosa
## 31           4.8         3.1          1.6         0.2     setosa
## 32           5.4         3.4          1.5         0.4     setosa
## 33           5.2         4.1          1.5         0.1     setosa
## 34           5.5         4.2          1.4         0.2     setosa
## 35           4.9         3.1          1.5         0.2     setosa
## 36           5.0         3.2          1.2         0.2     setosa
## 37           5.5         3.5          1.3         0.2     setosa
## 38           4.9         3.6          1.4         0.1     setosa
## 39           4.4         3.0          1.3         0.2     setosa
## 40           5.1         3.4          1.5         0.2     setosa
## 41           5.0         3.5          1.3         0.3     setosa
## 42           4.5         2.3          1.3         0.3     setosa
## 43           4.4         3.2          1.3         0.2     setosa
## 44           5.0         3.5          1.6         0.6     setosa
## 45           5.1         3.8          1.9         0.4     setosa
## 46           4.8         3.0          1.4         0.3     setosa
## 47           5.1         3.8          1.6         0.2     setosa
## 48           4.6         3.2          1.4         0.2     setosa
## 49           5.3         3.7          1.5         0.2     setosa
## 50           5.0         3.3          1.4         0.2     setosa
## 51           7.0         3.2          4.7         1.4 versicolor
## 52           6.4         3.2          4.5         1.5 versicolor
## 53           6.9         3.1          4.9         1.5 versicolor
## 54           5.5         2.3          4.0         1.3 versicolor
## 55           6.5         2.8          4.6         1.5 versicolor
## 56           5.7         2.8          4.5         1.3 versicolor
## 57           6.3         3.3          4.7         1.6 versicolor
## 58           4.9         2.4          3.3         1.0 versicolor
## 59           6.6         2.9          4.6         1.3 versicolor
## 60           5.2         2.7          3.9         1.4 versicolor
## 61           5.0         2.0          3.5         1.0 versicolor
## 62           5.9         3.0          4.2         1.5 versicolor
## 63           6.0         2.2          4.0         1.0 versicolor
## 64           6.1         2.9          4.7         1.4 versicolor
## 65           5.6         2.9          3.6         1.3 versicolor
## 66           6.7         3.1          4.4         1.4 versicolor
## 67           5.6         3.0          4.5         1.5 versicolor
## 68           5.8         2.7          4.1         1.0 versicolor
## 69           6.2         2.2          4.5         1.5 versicolor
## 70           5.6         2.5          3.9         1.1 versicolor
## 71           5.9         3.2          4.8         1.8 versicolor
## 72           6.1         2.8          4.0         1.3 versicolor
## 73           6.3         2.5          4.9         1.5 versicolor
## 74           6.1         2.8          4.7         1.2 versicolor
## 75           6.4         2.9          4.3         1.3 versicolor
## 76           6.6         3.0          4.4         1.4 versicolor
## 77           6.8         2.8          4.8         1.4 versicolor
## 78           6.7         3.0          5.0         1.7 versicolor
## 79           6.0         2.9          4.5         1.5 versicolor
## 80           5.7         2.6          3.5         1.0 versicolor
## 81           5.5         2.4          3.8         1.1 versicolor
## 82           5.5         2.4          3.7         1.0 versicolor
## 83           5.8         2.7          3.9         1.2 versicolor
## 84           6.0         2.7          5.1         1.6 versicolor
## 85           5.4         3.0          4.5         1.5 versicolor
## 86           6.0         3.4          4.5         1.6 versicolor
## 87           6.7         3.1          4.7         1.5 versicolor
## 88           6.3         2.3          4.4         1.3 versicolor
## 89           5.6         3.0          4.1         1.3 versicolor
## 90           5.5         2.5          4.0         1.3 versicolor
## 91           5.5         2.6          4.4         1.2 versicolor
## 92           6.1         3.0          4.6         1.4 versicolor
## 93           5.8         2.6          4.0         1.2 versicolor
## 94           5.0         2.3          3.3         1.0 versicolor
## 95           5.6         2.7          4.2         1.3 versicolor
## 96           5.7         3.0          4.2         1.2 versicolor
## 97           5.7         2.9          4.2         1.3 versicolor
## 98           6.2         2.9          4.3         1.3 versicolor
## 99           5.1         2.5          3.0         1.1 versicolor
## 100          5.7         2.8          4.1         1.3 versicolor
## 101          6.3         3.3          6.0         2.5  virginica
## 102          5.8         2.7          5.1         1.9  virginica
## 103          7.1         3.0          5.9         2.1  virginica
## 104          6.3         2.9          5.6         1.8  virginica
## 105          6.5         3.0          5.8         2.2  virginica
## 106          7.6         3.0          6.6         2.1  virginica
## 107          4.9         2.5          4.5         1.7  virginica
## 108          7.3         2.9          6.3         1.8  virginica
## 109          6.7         2.5          5.8         1.8  virginica
## 110          7.2         3.6          6.1         2.5  virginica
## 111          6.5         3.2          5.1         2.0  virginica
## 112          6.4         2.7          5.3         1.9  virginica
## 113          6.8         3.0          5.5         2.1  virginica
## 114          5.7         2.5          5.0         2.0  virginica
## 115          5.8         2.8          5.1         2.4  virginica
## 116          6.4         3.2          5.3         2.3  virginica
## 117          6.5         3.0          5.5         1.8  virginica
## 118          7.7         3.8          6.7         2.2  virginica
## 119          7.7         2.6          6.9         2.3  virginica
## 120          6.0         2.2          5.0         1.5  virginica
## 121          6.9         3.2          5.7         2.3  virginica
## 122          5.6         2.8          4.9         2.0  virginica
## 123          7.7         2.8          6.7         2.0  virginica
## 124          6.3         2.7          4.9         1.8  virginica
## 125          6.7         3.3          5.7         2.1  virginica
## 126          7.2         3.2          6.0         1.8  virginica
## 127          6.2         2.8          4.8         1.8  virginica
## 128          6.1         3.0          4.9         1.8  virginica
## 129          6.4         2.8          5.6         2.1  virginica
## 130          7.2         3.0          5.8         1.6  virginica
## 131          7.4         2.8          6.1         1.9  virginica
## 132          7.9         3.8          6.4         2.0  virginica
## 133          6.4         2.8          5.6         2.2  virginica
## 134          6.3         2.8          5.1         1.5  virginica
## 135          6.1         2.6          5.6         1.4  virginica
## 136          7.7         3.0          6.1         2.3  virginica
## 137          6.3         3.4          5.6         2.4  virginica
## 138          6.4         3.1          5.5         1.8  virginica
## 139          6.0         3.0          4.8         1.8  virginica
## 140          6.9         3.1          5.4         2.1  virginica
## 141          6.7         3.1          5.6         2.4  virginica
## 142          6.9         3.1          5.1         2.3  virginica
## 143          5.8         2.7          5.1         1.9  virginica
## 144          6.8         3.2          5.9         2.3  virginica
## 145          6.7         3.3          5.7         2.5  virginica
## 146          6.7         3.0          5.2         2.3  virginica
## 147          6.3         2.5          5.0         1.9  virginica
## 148          6.5         3.0          5.2         2.0  virginica
## 149          6.2         3.4          5.4         2.3  virginica
## 150          5.9         3.0          5.1         1.8  virginica
## 151          1.0         2.0          3.0         4.0     setosa

2.3 열 병합

2.3.1 열 병합의 필요성

  • 데이터의 양이 크고, 구조가 복잡할 수록 처리하기는 어렵기 때문에 작업의 효율을 위하여 필요한 컬럼만 모아서 새로운 데이터를 만들 필요가 있다.

2.3.2 cbind()

  • cbind()는 기본적으로 행렬을 만든다
  • 데이터프레임 구조를 유지하기 위해서는 먼저 데이터 프레임을 만들어야 한다.
iris.Sepal.lw <- cbind(iris$Sepal.Length, iris$Sepal.Width)
head(iris.Sepal.lw)   # matrix
##      [,1] [,2]
## [1,]  5.1  3.5
## [2,]  4.9  3.0
## [3,]  4.7  3.2
## [4,]  4.6  3.1
## [5,]  5.0  3.6
## [6,]  5.4  3.9
x <- c(1, 2, 3, 4 ,5)
y <- c(10, 20, 30, 40, 50)
z <- c("M", "M", "M", "F", "F")

d <- data.frame(x)
d <- cbind(d, y, z, stringsAsFactor = FALSE)

2.3.3 $연산자를 이용한 병합

x <- c(1, 2, 3, 4 ,5)
y <- c(10, 20, 30, 40, 50)
z <- c("M", "M", "M", "F", "F")
d <- data.frame(x)
d$y <- y
d$z <- z

연습문제

iris.S.L <- iris$Sepal.Length
iris.S.W <- iris$Sepal.Width
S <- iris$Species

d <- data.frame(x)
d <- cbind(iris.S.L, iris.S.W, S)

2.3.4 merge()를 이용한 병합

  • merge()는 공통 컬럼을 기준으로 통합한다.
name <- c("Jamse", "Mary", "John")
math <- c(70, 80, 90)
d1 <- data.frame(name, math)

name <- c("Jamse", "Mary", "John")
english <- c(80, 70, 90)
d2 <- data.frame(name, english)

merge(d1, d2)
##    name math english
## 1 Jamse   70      80
## 2  John   90      90
## 3  Mary   80      70

2.3.5 merge()와 cbind() 비교

merge(d1, d2); cbind(d1, d2)
##    name math english
## 1 Jamse   70      80
## 2  John   90      90
## 3  Mary   80      70
##    name math  name english
## 1 Jamse   70 Jamse      80
## 2  Mary   80  Mary      70
## 3  John   90  John      90

2.3.6 by 옵션을 사용한 merge()

  • 공통 컬럼은 가급적 하나인 것이 좋다. 단, by = 옵션을 사용할 수 있다.
name <- c("Jamse", "Mary", "John")
age <- c(72, 73, 74)
math <- c(70, 80, 90)
d1 <- data.frame(name, age, math)

name <- c("Jamse", "Mary", "John")
english <- c(80, 70, 90)
age <- c(72, 74, 73)
d2 <- data.frame(name, age, english)

merge(d1, d2, by = "name")
##    name age.x math age.y english
## 1 Jamse    72   70    72      80
## 2  John    74   90    73      90
## 3  Mary    73   80    74      70

2.3.7 all = FALSE를 사용한 merge()

  • 공통 컬럼에 공통값이 없으면 해당 행은 제외된다.
  • 기본값은 all = FALSE 이다
name <- c("James", "Mary", "John", "Lion")
age <- c(72, 73, 74, 89)
math <- c(70, 80, 90, 100)
d1 <- data.frame(name, age, math); d1
##    name age math
## 1 James  72   70
## 2  Mary  73   80
## 3  John  74   90
## 4  Lion  89  100
name <- c("James", "Mary", "John")
english <- c(80, 70, 90)
year <- c(72, 74, 73)
d2 <- data.frame(name, year, english); d2
##    name year english
## 1 James   72      80
## 2  Mary   74      70
## 3  John   73      90
merge(d1,d2)
##    name age math year english
## 1 James  72   70   72      80
## 2  John  74   90   73      90
## 3  Mary  73   80   74      70
merge(d1, d2, all = TRUE) # merge는 경고가 없는 반면, left_join()은 경고를 제시한다.
##    name age math year english
## 1 James  72   70   72      80
## 2  John  74   90   73      90
## 3  Lion  89  100   NA      NA
## 4  Mary  73   80   74      70

연습문제

1 . 데이터셋에서 Pclass, Sex, Age, SibSp, Parch, Fare, Embarked를 추출하여 selected 에 저장하시오

data <- read.csv("train.csv")
selected <- subset(data, select = c(Pclass, Sex, Age, SibSp, Parch, Fare, Embarked))
head(selected)
##   Pclass    Sex Age SibSp Parch    Fare Embarked
## 1      3   male  22     1     0  7.2500        S
## 2      1 female  38     1     0 71.2833        C
## 3      3 female  26     0     0  7.9250        S
## 4      1 female  35     1     0 53.1000        S
## 5      3   male  35     0     0  8.0500        S
## 6      3   male  NA     0     0  8.4583        Q
  1. test 데이터에서 1번 문제와 동일한 작업을 수행
test <- read.csv("test.csv")
selected_test <- subset(test, select = c(Pclass, Sex, Age, SibSp, Parch, Fare, Embarked))
  1. 1번과 2번의 결과데이터를 rbind를 활용하여 병합하시오
all.data <- rbind(selected,selected_test)
head(all.data)
##   Pclass    Sex Age SibSp Parch    Fare Embarked
## 1      3   male  22     1     0  7.2500        S
## 2      1 female  38     1     0 71.2833        C
## 3      3 female  26     0     0  7.9250        S
## 4      1 female  35     1     0 53.1000        S
## 5      3   male  35     0     0  8.0500        S
## 6      3   male  NA     0     0  8.4583        Q

2.4 행과 열의 요약

2.4.1 summary()

  • 데이터의 컬럼별 요약(기초통계량)을 제시한다
summary(iris)
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :50  
##  versicolor:50  
##  virginica :50  
##                 
##                 
## 
summary(iris$Sepal.Length)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   4.300   5.100   5.800   5.843   6.400   7.900

2.4.2 doBy::summaryBy()

  • summary() 가 단순 요약을 하는 데 비해, summaryBy()는 조건부 요약을 할 수 있다.
  • ~ 의 오른쪽 부분이 조건을 표현한다
#install.packages("doBy")
library(doBy)
summaryBy(Sepal.Length ~ Species, iris)
##      Species Sepal.Length.mean
## 1     setosa             5.006
## 2 versicolor             5.936
## 3  virginica             6.588
summaryBy(Sepal.Length + Sepal.Width ~ Species, iris) # 해당 칼럼에 대해여 Species 별로 요약한다.
##      Species Sepal.Length.mean Sepal.Width.mean
## 1     setosa             5.006            3.428
## 2 versicolor             5.936            2.770
## 3  virginica             6.588            2.974

연습문제

summary(all.data) # 이전 문제에서 합성한 데이터
##      Pclass          Sex           Age            SibSp       
##  Min.   :1.000   female:466   Min.   : 0.17   Min.   :0.0000  
##  1st Qu.:2.000   male  :843   1st Qu.:21.00   1st Qu.:0.0000  
##  Median :3.000                Median :28.00   Median :0.0000  
##  Mean   :2.295                Mean   :29.88   Mean   :0.4989  
##  3rd Qu.:3.000                3rd Qu.:39.00   3rd Qu.:1.0000  
##  Max.   :3.000                Max.   :80.00   Max.   :8.0000  
##                               NA's   :263                     
##      Parch            Fare         Embarked
##  Min.   :0.000   Min.   :  0.000    :  2   
##  1st Qu.:0.000   1st Qu.:  7.896   C:270   
##  Median :0.000   Median : 14.454   Q:123   
##  Mean   :0.385   Mean   : 33.295   S:914   
##  3rd Qu.:0.000   3rd Qu.: 31.275           
##  Max.   :9.000   Max.   :512.329           
##                  NA's   :1
summary(data)     # 원 데이터
##   PassengerId       Survived          Pclass     
##  Min.   :  1.0   Min.   :0.0000   Min.   :1.000  
##  1st Qu.:223.5   1st Qu.:0.0000   1st Qu.:2.000  
##  Median :446.0   Median :0.0000   Median :3.000  
##  Mean   :446.0   Mean   :0.3838   Mean   :2.309  
##  3rd Qu.:668.5   3rd Qu.:1.0000   3rd Qu.:3.000  
##  Max.   :891.0   Max.   :1.0000   Max.   :3.000  
##                                                  
##                                     Name         Sex           Age       
##  Abbing, Mr. Anthony                  :  1   female:314   Min.   : 0.42  
##  Abbott, Mr. Rossmore Edward          :  1   male  :577   1st Qu.:20.12  
##  Abbott, Mrs. Stanton (Rosa Hunt)     :  1                Median :28.00  
##  Abelson, Mr. Samuel                  :  1                Mean   :29.70  
##  Abelson, Mrs. Samuel (Hannah Wizosky):  1                3rd Qu.:38.00  
##  Adahl, Mr. Mauritz Nils Martin       :  1                Max.   :80.00  
##  (Other)                              :885                NA's   :177    
##      SibSp           Parch             Ticket         Fare       
##  Min.   :0.000   Min.   :0.0000   1601    :  7   Min.   :  0.00  
##  1st Qu.:0.000   1st Qu.:0.0000   347082  :  7   1st Qu.:  7.91  
##  Median :0.000   Median :0.0000   CA. 2343:  7   Median : 14.45  
##  Mean   :0.523   Mean   :0.3816   3101295 :  6   Mean   : 32.20  
##  3rd Qu.:1.000   3rd Qu.:0.0000   347088  :  6   3rd Qu.: 31.00  
##  Max.   :8.000   Max.   :6.0000   CA 2144 :  6   Max.   :512.33  
##                                   (Other) :852                   
##          Cabin     Embarked
##             :687    :  2   
##  B96 B98    :  4   C:168   
##  C23 C25 C27:  4   Q: 77   
##  G6         :  4   S:644   
##  C22 C26    :  3           
##  D          :  3           
##  (Other)    :186

2.5 정렬, 컬럼 접근

2.5.1 sort()

  • 백터를 정렬한다.
x <- c(1, 30, 22, 27, 51, 38, 45)
sort(x)
## [1]  1 22 27 30 38 45 51
sort(iris$Sepal.Length)
##   [1] 4.3 4.4 4.4 4.4 4.5 4.6 4.6 4.6 4.6 4.7 4.7 4.8 4.8 4.8 4.8 4.8 4.9
##  [18] 4.9 4.9 4.9 4.9 4.9 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.1 5.1
##  [35] 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.2 5.2 5.2 5.2 5.3 5.4 5.4 5.4 5.4 5.4
##  [52] 5.4 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.6 5.6 5.6 5.6 5.6 5.6 5.7 5.7 5.7
##  [69] 5.7 5.7 5.7 5.7 5.7 5.8 5.8 5.8 5.8 5.8 5.8 5.8 5.9 5.9 5.9 6.0 6.0
##  [86] 6.0 6.0 6.0 6.0 6.1 6.1 6.1 6.1 6.1 6.1 6.2 6.2 6.2 6.2 6.3 6.3 6.3
## [103] 6.3 6.3 6.3 6.3 6.3 6.3 6.4 6.4 6.4 6.4 6.4 6.4 6.4 6.5 6.5 6.5 6.5
## [120] 6.5 6.6 6.6 6.7 6.7 6.7 6.7 6.7 6.7 6.7 6.7 6.8 6.8 6.8 6.9 6.9 6.9
## [137] 6.9 7.0 7.1 7.2 7.2 7.2 7.3 7.4 7.6 7.7 7.7 7.7 7.7 7.9
sort(iris$Sepal.Length, decreasing = TRUE)  # 내림차순 정리
##   [1] 7.9 7.7 7.7 7.7 7.7 7.6 7.4 7.3 7.2 7.2 7.2 7.1 7.0 6.9 6.9 6.9 6.9
##  [18] 6.8 6.8 6.8 6.7 6.7 6.7 6.7 6.7 6.7 6.7 6.7 6.6 6.6 6.5 6.5 6.5 6.5
##  [35] 6.5 6.4 6.4 6.4 6.4 6.4 6.4 6.4 6.3 6.3 6.3 6.3 6.3 6.3 6.3 6.3 6.3
##  [52] 6.2 6.2 6.2 6.2 6.1 6.1 6.1 6.1 6.1 6.1 6.0 6.0 6.0 6.0 6.0 6.0 5.9
##  [69] 5.9 5.9 5.8 5.8 5.8 5.8 5.8 5.8 5.8 5.7 5.7 5.7 5.7 5.7 5.7 5.7 5.7
##  [86] 5.6 5.6 5.6 5.6 5.6 5.6 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.4 5.4 5.4 5.4
## [103] 5.4 5.4 5.3 5.2 5.2 5.2 5.2 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.0
## [120] 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 4.9 4.9 4.9 4.9 4.9 4.9 4.8 4.8
## [137] 4.8 4.8 4.8 4.7 4.7 4.6 4.6 4.6 4.6 4.5 4.4 4.4 4.4 4.3

2.5.2 order()

  • 벡터를 정렬한 뒤 순서를 반환한다.
iris$Sepal.Length
##   [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4
##  [18] 5.1 5.7 5.1 5.4 5.1 4.6 5.1 4.8 5.0 5.0 5.2 5.2 4.7 4.8 5.4 5.2 5.5
##  [35] 4.9 5.0 5.5 4.9 4.4 5.1 5.0 4.5 4.4 5.0 5.1 4.8 5.1 4.6 5.3 5.0 7.0
##  [52] 6.4 6.9 5.5 6.5 5.7 6.3 4.9 6.6 5.2 5.0 5.9 6.0 6.1 5.6 6.7 5.6 5.8
##  [69] 6.2 5.6 5.9 6.1 6.3 6.1 6.4 6.6 6.8 6.7 6.0 5.7 5.5 5.5 5.8 6.0 5.4
##  [86] 6.0 6.7 6.3 5.6 5.5 5.5 6.1 5.8 5.0 5.6 5.7 5.7 6.2 5.1 5.7 6.3 5.8
## [103] 7.1 6.3 6.5 7.6 4.9 7.3 6.7 7.2 6.5 6.4 6.8 5.7 5.8 6.4 6.5 7.7 7.7
## [120] 6.0 6.9 5.6 7.7 6.3 6.7 7.2 6.2 6.1 6.4 7.2 7.4 7.9 6.4 6.3 6.1 7.7
## [137] 6.3 6.4 6.0 6.9 6.7 6.9 5.8 6.8 6.7 6.7 6.3 6.5 6.2 5.9
order(iris$Sepal.Length)
##   [1]  14   9  39  43  42   4   7  23  48   3  30  12  13  25  31  46   2
##  [18]  10  35  38  58 107   5   8  26  27  36  41  44  50  61  94   1  18
##  [35]  20  22  24  40  45  47  99  28  29  33  60  49   6  11  17  21  32
##  [52]  85  34  37  54  81  82  90  91  65  67  70  89  95 122  16  19  56
##  [69]  80  96  97 100 114  15  68  83  93 102 115 143  62  71 150  63  79
##  [86]  84  86 120 139  64  72  74  92 128 135  69  98 127 149  57  73  88
## [103] 101 104 124 134 137 147  52  75 112 116 129 133 138  55 105 111 117
## [120] 148  59  76  66  78  87 109 125 141 145 146  77 113 144  53 121 140
## [137] 142  51 103 110 126 130 108 131 106 118 119 123 136 132
i <- order(iris$Sepal.Length)                     # 오름차순의 순서
iris$Sepal.Length[i]                              # 오름차ㅅ 정렬
##   [1] 4.3 4.4 4.4 4.4 4.5 4.6 4.6 4.6 4.6 4.7 4.7 4.8 4.8 4.8 4.8 4.8 4.9
##  [18] 4.9 4.9 4.9 4.9 4.9 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.1 5.1
##  [35] 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.2 5.2 5.2 5.2 5.3 5.4 5.4 5.4 5.4 5.4
##  [52] 5.4 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.6 5.6 5.6 5.6 5.6 5.6 5.7 5.7 5.7
##  [69] 5.7 5.7 5.7 5.7 5.7 5.8 5.8 5.8 5.8 5.8 5.8 5.8 5.9 5.9 5.9 6.0 6.0
##  [86] 6.0 6.0 6.0 6.0 6.1 6.1 6.1 6.1 6.1 6.1 6.2 6.2 6.2 6.2 6.3 6.3 6.3
## [103] 6.3 6.3 6.3 6.3 6.3 6.3 6.4 6.4 6.4 6.4 6.4 6.4 6.4 6.5 6.5 6.5 6.5
## [120] 6.5 6.6 6.6 6.7 6.7 6.7 6.7 6.7 6.7 6.7 6.7 6.8 6.8 6.8 6.9 6.9 6.9
## [137] 6.9 7.0 7.1 7.2 7.2 7.2 7.3 7.4 7.6 7.7 7.7 7.7 7.7 7.9
i <- order(iris$Sepal.Length, decreasing = TRUE)  # 내림차순의 순서
iris$Sepal.Length[i]                              # 내림차순 정렬
##   [1] 7.9 7.7 7.7 7.7 7.7 7.6 7.4 7.3 7.2 7.2 7.2 7.1 7.0 6.9 6.9 6.9 6.9
##  [18] 6.8 6.8 6.8 6.7 6.7 6.7 6.7 6.7 6.7 6.7 6.7 6.6 6.6 6.5 6.5 6.5 6.5
##  [35] 6.5 6.4 6.4 6.4 6.4 6.4 6.4 6.4 6.3 6.3 6.3 6.3 6.3 6.3 6.3 6.3 6.3
##  [52] 6.2 6.2 6.2 6.2 6.1 6.1 6.1 6.1 6.1 6.1 6.0 6.0 6.0 6.0 6.0 6.0 5.9
##  [69] 5.9 5.9 5.8 5.8 5.8 5.8 5.8 5.8 5.8 5.7 5.7 5.7 5.7 5.7 5.7 5.7 5.7
##  [86] 5.6 5.6 5.6 5.6 5.6 5.6 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.4 5.4 5.4 5.4
## [103] 5.4 5.4 5.3 5.2 5.2 5.2 5.2 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.0
## [120] 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 4.9 4.9 4.9 4.9 4.9 4.9 4.8 4.8
## [137] 4.8 4.8 4.8 4.7 4.7 4.6 4.6 4.6 4.6 4.5 4.4 4.4 4.4 4.3
  • 순서를 제시하는 특징을 이용해 데이터 프레임을 정렬한다
iris[order(iris$Sepal.Width),]                    # data를 Sepal.Width 기준으로 정렬
##     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
## 61           5.0         2.0          3.5         1.0 versicolor
## 63           6.0         2.2          4.0         1.0 versicolor
## 69           6.2         2.2          4.5         1.5 versicolor
## 120          6.0         2.2          5.0         1.5  virginica
## 42           4.5         2.3          1.3         0.3     setosa
## 54           5.5         2.3          4.0         1.3 versicolor
## 88           6.3         2.3          4.4         1.3 versicolor
## 94           5.0         2.3          3.3         1.0 versicolor
## 58           4.9         2.4          3.3         1.0 versicolor
## 81           5.5         2.4          3.8         1.1 versicolor
## 82           5.5         2.4          3.7         1.0 versicolor
## 70           5.6         2.5          3.9         1.1 versicolor
## 73           6.3         2.5          4.9         1.5 versicolor
## 90           5.5         2.5          4.0         1.3 versicolor
## 99           5.1         2.5          3.0         1.1 versicolor
## 107          4.9         2.5          4.5         1.7  virginica
## 109          6.7         2.5          5.8         1.8  virginica
## 114          5.7         2.5          5.0         2.0  virginica
## 147          6.3         2.5          5.0         1.9  virginica
## 80           5.7         2.6          3.5         1.0 versicolor
## 91           5.5         2.6          4.4         1.2 versicolor
## 93           5.8         2.6          4.0         1.2 versicolor
## 119          7.7         2.6          6.9         2.3  virginica
## 135          6.1         2.6          5.6         1.4  virginica
## 60           5.2         2.7          3.9         1.4 versicolor
## 68           5.8         2.7          4.1         1.0 versicolor
## 83           5.8         2.7          3.9         1.2 versicolor
## 84           6.0         2.7          5.1         1.6 versicolor
## 95           5.6         2.7          4.2         1.3 versicolor
## 102          5.8         2.7          5.1         1.9  virginica
## 112          6.4         2.7          5.3         1.9  virginica
## 124          6.3         2.7          4.9         1.8  virginica
## 143          5.8         2.7          5.1         1.9  virginica
## 55           6.5         2.8          4.6         1.5 versicolor
## 56           5.7         2.8          4.5         1.3 versicolor
## 72           6.1         2.8          4.0         1.3 versicolor
## 74           6.1         2.8          4.7         1.2 versicolor
## 77           6.8         2.8          4.8         1.4 versicolor
## 100          5.7         2.8          4.1         1.3 versicolor
## 115          5.8         2.8          5.1         2.4  virginica
## 122          5.6         2.8          4.9         2.0  virginica
## 123          7.7         2.8          6.7         2.0  virginica
## 127          6.2         2.8          4.8         1.8  virginica
## 129          6.4         2.8          5.6         2.1  virginica
## 131          7.4         2.8          6.1         1.9  virginica
## 133          6.4         2.8          5.6         2.2  virginica
## 134          6.3         2.8          5.1         1.5  virginica
## 9            4.4         2.9          1.4         0.2     setosa
## 59           6.6         2.9          4.6         1.3 versicolor
## 64           6.1         2.9          4.7         1.4 versicolor
## 65           5.6         2.9          3.6         1.3 versicolor
## 75           6.4         2.9          4.3         1.3 versicolor
## 79           6.0         2.9          4.5         1.5 versicolor
## 97           5.7         2.9          4.2         1.3 versicolor
## 98           6.2         2.9          4.3         1.3 versicolor
## 104          6.3         2.9          5.6         1.8  virginica
## 108          7.3         2.9          6.3         1.8  virginica
## 2            4.9         3.0          1.4         0.2     setosa
## 13           4.8         3.0          1.4         0.1     setosa
## 14           4.3         3.0          1.1         0.1     setosa
## 26           5.0         3.0          1.6         0.2     setosa
## 39           4.4         3.0          1.3         0.2     setosa
## 46           4.8         3.0          1.4         0.3     setosa
## 62           5.9         3.0          4.2         1.5 versicolor
## 67           5.6         3.0          4.5         1.5 versicolor
## 76           6.6         3.0          4.4         1.4 versicolor
## 78           6.7         3.0          5.0         1.7 versicolor
## 85           5.4         3.0          4.5         1.5 versicolor
## 89           5.6         3.0          4.1         1.3 versicolor
## 92           6.1         3.0          4.6         1.4 versicolor
## 96           5.7         3.0          4.2         1.2 versicolor
## 103          7.1         3.0          5.9         2.1  virginica
## 105          6.5         3.0          5.8         2.2  virginica
## 106          7.6         3.0          6.6         2.1  virginica
## 113          6.8         3.0          5.5         2.1  virginica
## 117          6.5         3.0          5.5         1.8  virginica
## 128          6.1         3.0          4.9         1.8  virginica
## 130          7.2         3.0          5.8         1.6  virginica
## 136          7.7         3.0          6.1         2.3  virginica
## 139          6.0         3.0          4.8         1.8  virginica
## 146          6.7         3.0          5.2         2.3  virginica
## 148          6.5         3.0          5.2         2.0  virginica
## 150          5.9         3.0          5.1         1.8  virginica
## 4            4.6         3.1          1.5         0.2     setosa
## 10           4.9         3.1          1.5         0.1     setosa
## 31           4.8         3.1          1.6         0.2     setosa
## 35           4.9         3.1          1.5         0.2     setosa
## 53           6.9         3.1          4.9         1.5 versicolor
## 66           6.7         3.1          4.4         1.4 versicolor
## 87           6.7         3.1          4.7         1.5 versicolor
## 138          6.4         3.1          5.5         1.8  virginica
## 140          6.9         3.1          5.4         2.1  virginica
## 141          6.7         3.1          5.6         2.4  virginica
## 142          6.9         3.1          5.1         2.3  virginica
## 3            4.7         3.2          1.3         0.2     setosa
## 30           4.7         3.2          1.6         0.2     setosa
## 36           5.0         3.2          1.2         0.2     setosa
## 43           4.4         3.2          1.3         0.2     setosa
## 48           4.6         3.2          1.4         0.2     setosa
## 51           7.0         3.2          4.7         1.4 versicolor
## 52           6.4         3.2          4.5         1.5 versicolor
## 71           5.9         3.2          4.8         1.8 versicolor
## 111          6.5         3.2          5.1         2.0  virginica
## 116          6.4         3.2          5.3         2.3  virginica
## 121          6.9         3.2          5.7         2.3  virginica
## 126          7.2         3.2          6.0         1.8  virginica
## 144          6.8         3.2          5.9         2.3  virginica
## 24           5.1         3.3          1.7         0.5     setosa
## 50           5.0         3.3          1.4         0.2     setosa
## 57           6.3         3.3          4.7         1.6 versicolor
## 101          6.3         3.3          6.0         2.5  virginica
## 125          6.7         3.3          5.7         2.1  virginica
## 145          6.7         3.3          5.7         2.5  virginica
## 7            4.6         3.4          1.4         0.3     setosa
## 8            5.0         3.4          1.5         0.2     setosa
## 12           4.8         3.4          1.6         0.2     setosa
## 21           5.4         3.4          1.7         0.2     setosa
## 25           4.8         3.4          1.9         0.2     setosa
## 27           5.0         3.4          1.6         0.4     setosa
## 29           5.2         3.4          1.4         0.2     setosa
## 32           5.4         3.4          1.5         0.4     setosa
## 40           5.1         3.4          1.5         0.2     setosa
## 86           6.0         3.4          4.5         1.6 versicolor
## 137          6.3         3.4          5.6         2.4  virginica
## 149          6.2         3.4          5.4         2.3  virginica
## 1            5.1         3.5          1.4         0.2     setosa
## 18           5.1         3.5          1.4         0.3     setosa
## 28           5.2         3.5          1.5         0.2     setosa
## 37           5.5         3.5          1.3         0.2     setosa
## 41           5.0         3.5          1.3         0.3     setosa
## 44           5.0         3.5          1.6         0.6     setosa
## 5            5.0         3.6          1.4         0.2     setosa
## 23           4.6         3.6          1.0         0.2     setosa
## 38           4.9         3.6          1.4         0.1     setosa
## 110          7.2         3.6          6.1         2.5  virginica
## 11           5.4         3.7          1.5         0.2     setosa
## 22           5.1         3.7          1.5         0.4     setosa
## 49           5.3         3.7          1.5         0.2     setosa
## 19           5.7         3.8          1.7         0.3     setosa
## 20           5.1         3.8          1.5         0.3     setosa
## 45           5.1         3.8          1.9         0.4     setosa
## 47           5.1         3.8          1.6         0.2     setosa
## 118          7.7         3.8          6.7         2.2  virginica
## 132          7.9         3.8          6.4         2.0  virginica
## 6            5.4         3.9          1.7         0.4     setosa
## 17           5.4         3.9          1.3         0.4     setosa
## 15           5.8         4.0          1.2         0.2     setosa
## 33           5.2         4.1          1.5         0.1     setosa
## 34           5.5         4.2          1.4         0.2     setosa
## 16           5.7         4.4          1.5         0.4     setosa
iris[order(iris$Sepal.Width, iris$Petal.Width),]  # 두 개 컬럼을 기준으로
##     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
## 61           5.0         2.0          3.5         1.0 versicolor
## 63           6.0         2.2          4.0         1.0 versicolor
## 69           6.2         2.2          4.5         1.5 versicolor
## 120          6.0         2.2          5.0         1.5  virginica
## 42           4.5         2.3          1.3         0.3     setosa
## 94           5.0         2.3          3.3         1.0 versicolor
## 54           5.5         2.3          4.0         1.3 versicolor
## 88           6.3         2.3          4.4         1.3 versicolor
## 58           4.9         2.4          3.3         1.0 versicolor
## 82           5.5         2.4          3.7         1.0 versicolor
## 81           5.5         2.4          3.8         1.1 versicolor
## 70           5.6         2.5          3.9         1.1 versicolor
## 99           5.1         2.5          3.0         1.1 versicolor
## 90           5.5         2.5          4.0         1.3 versicolor
## 73           6.3         2.5          4.9         1.5 versicolor
## 107          4.9         2.5          4.5         1.7  virginica
## 109          6.7         2.5          5.8         1.8  virginica
## 147          6.3         2.5          5.0         1.9  virginica
## 114          5.7         2.5          5.0         2.0  virginica
## 80           5.7         2.6          3.5         1.0 versicolor
## 91           5.5         2.6          4.4         1.2 versicolor
## 93           5.8         2.6          4.0         1.2 versicolor
## 135          6.1         2.6          5.6         1.4  virginica
## 119          7.7         2.6          6.9         2.3  virginica
## 68           5.8         2.7          4.1         1.0 versicolor
## 83           5.8         2.7          3.9         1.2 versicolor
## 95           5.6         2.7          4.2         1.3 versicolor
## 60           5.2         2.7          3.9         1.4 versicolor
## 84           6.0         2.7          5.1         1.6 versicolor
## 124          6.3         2.7          4.9         1.8  virginica
## 102          5.8         2.7          5.1         1.9  virginica
## 112          6.4         2.7          5.3         1.9  virginica
## 143          5.8         2.7          5.1         1.9  virginica
## 74           6.1         2.8          4.7         1.2 versicolor
## 56           5.7         2.8          4.5         1.3 versicolor
## 72           6.1         2.8          4.0         1.3 versicolor
## 100          5.7         2.8          4.1         1.3 versicolor
## 77           6.8         2.8          4.8         1.4 versicolor
## 55           6.5         2.8          4.6         1.5 versicolor
## 134          6.3         2.8          5.1         1.5  virginica
## 127          6.2         2.8          4.8         1.8  virginica
## 131          7.4         2.8          6.1         1.9  virginica
## 122          5.6         2.8          4.9         2.0  virginica
## 123          7.7         2.8          6.7         2.0  virginica
## 129          6.4         2.8          5.6         2.1  virginica
## 133          6.4         2.8          5.6         2.2  virginica
## 115          5.8         2.8          5.1         2.4  virginica
## 9            4.4         2.9          1.4         0.2     setosa
## 59           6.6         2.9          4.6         1.3 versicolor
## 65           5.6         2.9          3.6         1.3 versicolor
## 75           6.4         2.9          4.3         1.3 versicolor
## 97           5.7         2.9          4.2         1.3 versicolor
## 98           6.2         2.9          4.3         1.3 versicolor
## 64           6.1         2.9          4.7         1.4 versicolor
## 79           6.0         2.9          4.5         1.5 versicolor
## 104          6.3         2.9          5.6         1.8  virginica
## 108          7.3         2.9          6.3         1.8  virginica
## 13           4.8         3.0          1.4         0.1     setosa
## 14           4.3         3.0          1.1         0.1     setosa
## 2            4.9         3.0          1.4         0.2     setosa
## 26           5.0         3.0          1.6         0.2     setosa
## 39           4.4         3.0          1.3         0.2     setosa
## 46           4.8         3.0          1.4         0.3     setosa
## 96           5.7         3.0          4.2         1.2 versicolor
## 89           5.6         3.0          4.1         1.3 versicolor
## 76           6.6         3.0          4.4         1.4 versicolor
## 92           6.1         3.0          4.6         1.4 versicolor
## 62           5.9         3.0          4.2         1.5 versicolor
## 67           5.6         3.0          4.5         1.5 versicolor
## 85           5.4         3.0          4.5         1.5 versicolor
## 130          7.2         3.0          5.8         1.6  virginica
## 78           6.7         3.0          5.0         1.7 versicolor
## 117          6.5         3.0          5.5         1.8  virginica
## 128          6.1         3.0          4.9         1.8  virginica
## 139          6.0         3.0          4.8         1.8  virginica
## 150          5.9         3.0          5.1         1.8  virginica
## 148          6.5         3.0          5.2         2.0  virginica
## 103          7.1         3.0          5.9         2.1  virginica
## 106          7.6         3.0          6.6         2.1  virginica
## 113          6.8         3.0          5.5         2.1  virginica
## 105          6.5         3.0          5.8         2.2  virginica
## 136          7.7         3.0          6.1         2.3  virginica
## 146          6.7         3.0          5.2         2.3  virginica
## 10           4.9         3.1          1.5         0.1     setosa
## 4            4.6         3.1          1.5         0.2     setosa
## 31           4.8         3.1          1.6         0.2     setosa
## 35           4.9         3.1          1.5         0.2     setosa
## 66           6.7         3.1          4.4         1.4 versicolor
## 53           6.9         3.1          4.9         1.5 versicolor
## 87           6.7         3.1          4.7         1.5 versicolor
## 138          6.4         3.1          5.5         1.8  virginica
## 140          6.9         3.1          5.4         2.1  virginica
## 142          6.9         3.1          5.1         2.3  virginica
## 141          6.7         3.1          5.6         2.4  virginica
## 3            4.7         3.2          1.3         0.2     setosa
## 30           4.7         3.2          1.6         0.2     setosa
## 36           5.0         3.2          1.2         0.2     setosa
## 43           4.4         3.2          1.3         0.2     setosa
## 48           4.6         3.2          1.4         0.2     setosa
## 51           7.0         3.2          4.7         1.4 versicolor
## 52           6.4         3.2          4.5         1.5 versicolor
## 71           5.9         3.2          4.8         1.8 versicolor
## 126          7.2         3.2          6.0         1.8  virginica
## 111          6.5         3.2          5.1         2.0  virginica
## 116          6.4         3.2          5.3         2.3  virginica
## 121          6.9         3.2          5.7         2.3  virginica
## 144          6.8         3.2          5.9         2.3  virginica
## 50           5.0         3.3          1.4         0.2     setosa
## 24           5.1         3.3          1.7         0.5     setosa
## 57           6.3         3.3          4.7         1.6 versicolor
## 125          6.7         3.3          5.7         2.1  virginica
## 101          6.3         3.3          6.0         2.5  virginica
## 145          6.7         3.3          5.7         2.5  virginica
## 8            5.0         3.4          1.5         0.2     setosa
## 12           4.8         3.4          1.6         0.2     setosa
## 21           5.4         3.4          1.7         0.2     setosa
## 25           4.8         3.4          1.9         0.2     setosa
## 29           5.2         3.4          1.4         0.2     setosa
## 40           5.1         3.4          1.5         0.2     setosa
## 7            4.6         3.4          1.4         0.3     setosa
## 27           5.0         3.4          1.6         0.4     setosa
## 32           5.4         3.4          1.5         0.4     setosa
## 86           6.0         3.4          4.5         1.6 versicolor
## 149          6.2         3.4          5.4         2.3  virginica
## 137          6.3         3.4          5.6         2.4  virginica
## 1            5.1         3.5          1.4         0.2     setosa
## 28           5.2         3.5          1.5         0.2     setosa
## 37           5.5         3.5          1.3         0.2     setosa
## 18           5.1         3.5          1.4         0.3     setosa
## 41           5.0         3.5          1.3         0.3     setosa
## 44           5.0         3.5          1.6         0.6     setosa
## 38           4.9         3.6          1.4         0.1     setosa
## 5            5.0         3.6          1.4         0.2     setosa
## 23           4.6         3.6          1.0         0.2     setosa
## 110          7.2         3.6          6.1         2.5  virginica
## 11           5.4         3.7          1.5         0.2     setosa
## 49           5.3         3.7          1.5         0.2     setosa
## 22           5.1         3.7          1.5         0.4     setosa
## 47           5.1         3.8          1.6         0.2     setosa
## 19           5.7         3.8          1.7         0.3     setosa
## 20           5.1         3.8          1.5         0.3     setosa
## 45           5.1         3.8          1.9         0.4     setosa
## 132          7.9         3.8          6.4         2.0  virginica
## 118          7.7         3.8          6.7         2.2  virginica
## 6            5.4         3.9          1.7         0.4     setosa
## 17           5.4         3.9          1.3         0.4     setosa
## 15           5.8         4.0          1.2         0.2     setosa
## 33           5.2         4.1          1.5         0.1     setosa
## 34           5.5         4.2          1.4         0.2     setosa
## 16           5.7         4.4          1.5         0.4     setosa

2.5.3 with

  • 데이터의 이름을 사용하지 않고 바로 컬럼명을 사용하게 하기 때문에 가독성이 높다
  • 아래 두 명령어는 같은 결과를 출력한다.
with(iris, sum(Sepal.Length))
## [1] 876.5
sum(iris$Sepal.Length)   
## [1] 876.5
  • with()는 ifelse 구문과 함께 쓰여 데이터에 결과를 추가할 때 쓰일 때가 많다.
with(iris, ifelse(Sepal.Length > 5.0, "High", "Low"))
##   [1] "High" "Low"  "Low"  "Low"  "Low"  "High" "Low"  "Low"  "Low"  "Low" 
##  [11] "High" "Low"  "Low"  "Low"  "High" "High" "High" "High" "High" "High"
##  [21] "High" "High" "Low"  "High" "Low"  "Low"  "Low"  "High" "High" "Low" 
##  [31] "Low"  "High" "High" "High" "Low"  "Low"  "High" "Low"  "Low"  "High"
##  [41] "Low"  "Low"  "Low"  "Low"  "High" "Low"  "High" "Low"  "High" "Low" 
##  [51] "High" "High" "High" "High" "High" "High" "High" "Low"  "High" "High"
##  [61] "Low"  "High" "High" "High" "High" "High" "High" "High" "High" "High"
##  [71] "High" "High" "High" "High" "High" "High" "High" "High" "High" "High"
##  [81] "High" "High" "High" "High" "High" "High" "High" "High" "High" "High"
##  [91] "High" "High" "High" "Low"  "High" "High" "High" "High" "High" "High"
## [101] "High" "High" "High" "High" "High" "High" "Low"  "High" "High" "High"
## [111] "High" "High" "High" "High" "High" "High" "High" "High" "High" "High"
## [121] "High" "High" "High" "High" "High" "High" "High" "High" "High" "High"
## [131] "High" "High" "High" "High" "High" "High" "High" "High" "High" "High"
## [141] "High" "High" "High" "High" "High" "High" "High" "High" "High" "High"
# sepal.Length 가 5.0 이상이면, high, 아니면 Low를 출력한다
# 이 결과를 원 데이터에 덧붙이려면 다음과 같다
iris$Sepal.Length.Judge <- with(iris, ifelse(Sepal.Length > 5.0, "High", "Low"))

연습문제

  1. mtcars의 차량 중 가장 높은 마력 5개
mtcars
##                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
## Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
## Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
## Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
## Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
## Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
## Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
## Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
## Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
## AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
## Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
## Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
## Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
## Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
## Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
## Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
i <- order(mtcars$hp, decreasing = TRUE)
head(mtcars$hp[i], 5)
## [1] 335 264 245 245 230
lapply(mtcars, sort, decreasing = T)[['hp']][c(1:5)]
## [1] 335 264 245 245 230
  1. 가장 낮은 mpg 5개
ii <- order(mtcars$mpg)
head(mtcars$hp[ii], 5)
## [1] 205 215 245 245 230
lapply(mtcars, sort)[['mpg']][c(1:5)]
## [1] 10.4 10.4 13.3 14.3 14.7
  1. mtcars를 마력이 높은 순으로 데이터를 정렬하시오, 가장 높은 마력을 갖는 차종은 무엇인가
rownames(mtcars[order(mtcars$hp),] [1,])
## [1] "Honda Civic"
  1. mtcars 중에서 기어수가 가장 많으면서, 가장 많은 실린더를 갖는 차종은 무엇인가
rownames(mtcars[order(mtcars$gear, mtcars$cyl), ] [1,]) 
## [1] "Toyota Corona"