데이터 분석/R 데이터 처리 & 분석

[R] duplicated 함수 끝내기 (중복 데이터 확인하기)

love R 2023. 3. 21. 23:15
반응형

 

R duplicatd 함수

1. duplicated 함수

duplicated 함수는 반복적으로 나타나는 요소를 보여주는 함수입니다. 

함수의 결과 형태는 논리형 벡터(Logical vector)로 나타납니다.

 

# 1~4의 반복요소 만들기 
dup <- c(1,1,1,1,2,2,2,2,2,3,3,4,4)
dup
 [1] 1 1 1 1 2 2 2 2 2 3 3 4 4


# duplicated 함수 적용
duplicated(dup)

[1] FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE TRUE FALSE  TRUE FALSE  TRUE

dup에 1부터 4까지의 요소가 저장되어 있습니다.

  • 1: 4개
  • 2: 5개
  • 3: 2개
  • 4: 2개

 

이 벡터(dup)에 duplicated 함수를 적용하면 아래처럼 논리 연산자가 산출됩니다.

 

[1] FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE TRUE FALSE  TRUE FALSE  TRUE

 

여기에 우리가 만든 dup 벡터를 적용하면 아래처럼 나타낼 수 있습니다.

 

1 1 1 1 2 2 2 2 2 3 3 4 4
FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE TRUE FALSE TRUE

 

뭔가 공통점이 보이나요? 

반복되는 요소 중에 가장 처음 나타난 값이 FALSE로 반환되고 그 이후에는 TRUE로 반환됩니다.

 

# dup 벡터에서 반복된 값을 추출하기

# duplicated 함수를 적용한 것을 'dup_logic' 이라는 이름으로 저장

dup_logic <- duplicated(dup)

# 반복값 추출 -> 벡터 subsetting 이용 -> 위에서 TRUE로 반환된 숫자들이 나옴. 

dup[dup_logic]

[1] 1 1 1 2 2 2 2 3 4

 

 

여기서 중복된 요소를 하나씩만 추출하려면 다음같이 합니다.

 

duplicated(dup)

[1] FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE TRUE FALSE  TRUE FALSE  TRUE



# 방법1.
# 느낌표(!)를 붙이면 논리형 연산자들이 반대로 나오죠 
# TRUE -> FALSE // FALSE->TRUE

!duplicated(dup)

[1]  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE


dup[ !duplicated(dup) ]
[1] 1 2 3 4


# 방법2.
# unique 함수 이용

dup_logic <- 
duplicated(dup)

dup[dup_logic]
[1] 1 1 1 2 2 2 2 3 4

# 이 결과에 unique 함수를 취하면

unique(dup[dup_logic])
[1] 1 2 3 4

 

 

2. 데이터프레임에 duplicated 적용해보기

 

그럼 ~ R에선 데이터프레임 쓸 일이 많으니 함 적용해볼게요

 

# 데이터프레임 생성
dup_data <- data.frame(item = c("책",'가방','연필','지우개','지우개','연필'),
                                       price = c(1000,2000,3000,4000,4000,2000))
dup_data 

    item      price
1 책          1000
2 가방       2000
3 연필       3000
4 지우개   4000
5 지우개   4000
6 연필       2000

 

위 데이터를 보면 (지우개,4000) 이 중복된 행이 있네요.

요런 놈들을 제거해볼게요.

 

# duplicated 함수
duplicated(dup_data)

# '행'단위로 반복된 행이 있는지를 TRUE or FALSE 형태로 나옴
[1] FALSE FALSE FALSE FALSE  TRUE FALSE


# 앞에 느낌표를 붙여서 반대로 만들기
!duplicated(dup_data)
[1] TRUE TRUE TRUE TRUE FALSE TRUE


# subsetting 을 통해 중복되지 않은 행을 추출
# 데이터프레임의 subsetting을 할 시에는 행단위로 참/거짓을 판단 -->> 즉, dataset[논리형벡터, ] 

dup_data [ !duplicated(dup_data),  ]  # 다섯번째 행이 FALSE로 반환되었으니까 빼고 추출됨
   item      price
1 책          1000
2 가방       2000
3 연필       3000
4 지우개   4000
6 연필       2000


 

반응형