2 분 소요

분석시 데이터의 프레임을 결합하는 경우가 꽤 발생한다.
R은 이 기능을 충분히 제공하고 있으며 이 함수에 대해서 정리를 한다.

cbind(A,B)

열결합을 나타내는 함수, cbind(…, deparse.level = 1) , deparse.level : 컬럼명 부여, 1 또는 2 컬럼명 부여

> m <- cbind(1, 1:7) # the '1'은 recycled
> cbind(m, 8:14)
##      [,1] [,2] [,3]
## [1,]    1    1    8
## [2,]    1    2    9
## [3,]    1    3   10
## [4,]    1    4   11
## [5,]    1    5   12
## [6,]    1    6   13
## [7,]    1    7   14
> cbind(m, 8:14)[, c(1, 3, 2)] # 컬럼  순서를 1,3,2로 조정
##      [,1] [,2] [,3]
## [1,]    1    8    1
## [2,]    1    9    2
## [3,]    1   10    3
## [4,]    1   11    4
## [5,]    1   12    5
## [6,]    1   13    6
## [7,]    1   14    7
> cbind(m, "컬럼_5" = 8:14) #컬럼명  부여
##          컬럼_5
## [1,] 1 1      8
## [2,] 1 2      9
## [3,] 1 3     10
## [4,] 1 4     11
## [5,] 1 5     12
## [6,] 1 6     13
## [7,] 1 7     14

rbind(A,B)

행결합을 나타내는 함수, rbind(…, deparse.level = 1) , deparse.level : 행명 부여 주로 데이터를 추가하는 데 사용함

> dd = 10
> rbind(1:4, c = 2, "a++" = 10, dd, deparse.level = 0)
##     [,1] [,2] [,3] [,4]
##        1    2    3    4
## c      2    2    2    2
## a++   10   10   10   10
##       10   10   10   10

merge(A,B, by=‘key’)

key 기준에 따라 merge 한다.

> authors <- data.frame(
    ## I(*) : use character columns of names to get sensible sort order
    surname = I(c("Tukey", "Venables", "Tierney", "Ripley", "McNeil")),
    nationality = c("US", "Australia", "US", "UK", "Australia"),
    deceased = c("yes", rep("no", 4)))

> authorN <- within(authors, { name <- surname; rm(surname) })

> books <- data.frame(
    name = I(c("Tukey", "Venables", "Tierney",
             "Ripley", "Ripley", "McNeil", "R Core")),
    title = c("Exploratory Data Analysis",
              "Modern Applied Statistics ...",
              "LISP-STAT",
              "Spatial Statistics", "Stochastic Simulation",
              "Interactive Data Analysis",
              "An Introduction to R"),
    other.author = c(NA, "Ripley", NA, NA, NA, NA,
                     "Venables & Smith"))


> merge(authorN, books)  #  name 기준으로 데이터  프레임이  머지됨
##       name nationality deceased                         title other.author
## 1   McNeil   Australia       no     Interactive Data Analysis         <NA>
## 2   Ripley          UK       no            Spatial Statistics         <NA>
## 3   Ripley          UK       no         Stochastic Simulation         <NA>
## 4  Tierney          US       no                     LISP-STAT         <NA>
## 5    Tukey          US      yes     Exploratory Data Analysis         <NA>
## 6 Venables   Australia       no Modern Applied Statistics ...       Ripley
> merge(authors, books, by.x = "surname", by.y = "name")  #  2개의 데이터프레임에서 컬럼명이  다른경우 
##    surname nationality deceased                         title other.author
## 1   McNeil   Australia       no     Interactive Data Analysis         <NA>
## 2   Ripley          UK       no            Spatial Statistics         <NA>
## 3   Ripley          UK       no         Stochastic Simulation         <NA>
## 4  Tierney          US       no                     LISP-STAT         <NA>
## 5    Tukey          US      yes     Exploratory Data Analysis         <NA>
## 6 Venables   Australia       no Modern Applied Statistics ...       Ripley

댓글남기기