4.7 distinct() 함수를 이용한 유일한 값 추출

4.7.1 distinct() 함수의 기본 형식

distinct(dataframe, var1, var2, ...)

  • dataframe : 데이터 세트
  • var1, var2, ... : 중복이 없는 유일한 값(unique, distinct value)을 추출하고자 하는 기준이 되는 컬럼(변수)

base 패키지의 unique() 함수와 같은 기능을 수행하지만, dplyr 패키지의 distinct() 가 C 언어로 작성이 되어 있기 때문에 속도는 훨씬 빠르다.

4.7.2 단일 기준에 의한 유일 값 추출

Cars93_1 데이터 프레임에서 ‘차종(Type)’과 ’생산국-미국여부(Origin)’ 변수를 기준으로 중복없는 유일한 값을 추출해 보자.

# to use Cars93 dataframe 
names(Cars93)
##  [1] "Manufacturer"       "Model"              "Type"              
##  [4] "Min.Price"          "Price"              "Max.Price"         
##  [7] "MPG.city"           "MPG.highway"        "AirBags"           
## [10] "DriveTrain"         "Cylinders"          "EngineSize"        
## [13] "Horsepower"         "RPM"                "Rev.per.mile"      
## [16] "Man.trans.avail"    "Fuel.tank.capacity" "Passengers"        
## [19] "Length"             "Wheelbase"          "Width"             
## [22] "Turn.circle"        "Rear.seat.room"     "Luggage.room"      
## [25] "Weight"             "Origin"             "Make"
# distinct(dataframe, var1) :  find unique values of var1 in a table
distinct(Cars93, Type)
##      Type
## 1   Small
## 2 Midsize
## 3 Compact
## 4   Large
## 5  Sporty
## 6     Van
distinct(Cars93, Origin)
##    Origin
## 1 non-USA
## 2     USA
#  또는
Cars93   %>%  distinct(Type)
##      Type
## 1   Small
## 2 Midsize
## 3 Compact
## 4   Large
## 5  Sporty
## 6     Van
Cars93   %>%  distinct(Origin)
##    Origin
## 1 non-USA
## 2     USA
  • distinct() 함수의 결과는 데이터 프레임으로 출력이 된다.

4.7.3 복수 기준에 의한 유일 값 추출

Cars93_1 데이터 프레임에서 ‘차종(Type)’과 ’생산국-미국여부(Origin)’ 변수를 동시에 고려하여 중복없는 유일한 값을 추출해 보자.

# distinct(dataframe, var1, var2) :  find unique values in a table
distinct(Cars93, Type, Origin)
##       Type  Origin
## 1    Small non-USA
## 2  Midsize non-USA
## 3  Compact non-USA
## 4  Midsize     USA
## 5    Large     USA
## 6  Compact     USA
## 7   Sporty     USA
## 8      Van     USA
## 9    Small     USA
## 10  Sporty non-USA
## 11     Van non-USA
distinct(Cars93, Origin, Type)
##       Type  Origin
## 1    Small non-USA
## 2  Midsize non-USA
## 3  Compact non-USA
## 4  Midsize     USA
## 5    Large     USA
## 6  Compact     USA
## 7   Sporty     USA
## 8      Van     USA
## 9    Small     USA
## 10  Sporty non-USA
## 11     Van non-USA
#  또는
Cars93   %>%  distinct(Type, Origin)
##       Type  Origin
## 1    Small non-USA
## 2  Midsize non-USA
## 3  Compact non-USA
## 4  Midsize     USA
## 5    Large     USA
## 6  Compact     USA
## 7   Sporty     USA
## 8      Van     USA
## 9    Small     USA
## 10  Sporty non-USA
## 11     Van non-USA
Cars93   %>%  distinct(Origin, Type)
##       Type  Origin
## 1    Small non-USA
## 2  Midsize non-USA
## 3  Compact non-USA
## 4  Midsize     USA
## 5    Large     USA
## 6  Compact     USA
## 7   Sporty     USA
## 8      Van     USA
## 9    Small     USA
## 10  Sporty non-USA
## 11     Van non-USA

참고로, base 패키지의 unique() 함수로는 unique(Cars93[, c("Origin", "Type")]) 이렇게 입력하면 된다.

# unique() 함수의 사용
unique(Cars93[, c("Origin")])
## [1] non-USA USA    
## Levels: USA non-USA
unique(Cars93[, c("Type")])
## [1] Small   Midsize Compact Large   Sporty  Van    
## Levels: Compact Large Midsize Small Sporty Van
unique(Cars93[, c("Origin", "Type")])
##     Origin    Type
## 1  non-USA   Small
## 2  non-USA Midsize
## 3  non-USA Compact
## 6      USA Midsize
## 7      USA   Large
## 12     USA Compact
## 14     USA  Sporty
## 16     USA     Van
## 23     USA   Small
## 40 non-USA  Sporty
## 56 non-USA     Van
unique(Cars93[, c("Type", "Origin")])
##       Type  Origin
## 1    Small non-USA
## 2  Midsize non-USA
## 3  Compact non-USA
## 6  Midsize     USA
## 7    Large     USA
## 12 Compact     USA
## 14  Sporty     USA
## 16     Van     USA
## 23   Small     USA
## 40  Sporty non-USA
## 56     Van non-USA
  • unique() 함수의 결과는 기준 컬럼이 하나일 때는 factor 형으로, 기준 컬럼이 여러 개일 때는 데이터 프레임 형태로 출력이 된다.