본문 바로가기
R

[R] 데이터 처리

by Urban communicator 2023. 10. 3.

데이터 정렬

앞에 글에서 생성했던 hwdf 변수를 사용하여 데이터를 정렬해보자.

  • sort는 오름차순으로 정리해주는 함수이다. 
  • sort함수의 decreasing 옵션을 사용하면 내림차순으로 정리해준다. 
  • order는 변수 데이터 크기의 순위를 나타낸다. 
hwdf <- transform(hwdf, stat = sample(1:11))
sort(height) # 오름차순
sort(height, decreasing = TRUE) # 내림차순
order(height) # 값 순위 
height[order(height)] # sort 정렬과 동일


그런데 sort() 함수는 데이터 프레임 자체에서 사용할 수 없다. 따라서, plyr의 arrange()를 사용하여 데이터를 정리해주어야 한다. 

library(plyr)
arrange(hwdf, height, desc(weight), stat) # 앞에있는 변수를 기준으로 정렬되며, desc는 내림차순을 의미)


데이터 프레임 결합

다음은 데이터 프레임을 결합하는 방법을 배워보자. 

  • id변수에 c01부터 c04까지의 데이터를 입력한다. 
  • lastname 변수에 Kim, Lee, Choi, Park 네 가지 성을 입력한다. 
  • id와 lastname을 결합하여 데이터프레임을 만들고, mart_1이라고 명명한다. 
id <- c("c01","c02","c03","c04") 
lastname <- c("Kim", "Lee", "Choi", "Park") 
mart_1 <- data.frame(id, lastname)

 

결합에 사용할 두 번째 데이터 프레임을 만들어보자. 

  • id에는 c05~c07 데이터를 만든다. 
  • lastname은 이번에는 Bae, Kim, Lim을 입력한다. 
  • 앞서 mart_1과 마찬가지로 mart_2 데이터프레임을 만든다. 
mart_2 <- data.frame( 
  id = c("c05", "c06", "c07"), 
  lastname = c("Bae", "Kim", "Lim"))

 

결합에 사용할 세 번째 데이터 프레임을 만들어보자. 

  • id에는 c08, c09 데이터를 만든다. 
  • lastname은 이번에는 Lee와 Park를 입력한다. 
  • 이번에는 이들의 성별을 구분하는 gender 변수도 함께 입력한다. 
mart_3 <- data.frame(id = c("c08", "c09"), 
                     lastname = c("Lee", "Park"), 
                     gender = c("F", "M"))



1) 두 데이터 프레임 상하 결합

mart_1과 mart_2 데이터를 위, 아래로 결합해 보자. rbind 함수를 사용한다. 

mart_12 <- rbind(mart_1, mart_2) # rbind: row bind, 열의 갯수가 일치해야 함
mart_12

mart_1과 mart_2를 결합하여 만든 mart_12를 mart_3과 결합해 보자. 

rbind(mart_12, mart_3)

에러가 발생한다. 왜 그럴까?

mart_3의 컬럼 개수가 3개이므로 mart_12와 결합될 수 없다. 

 

이번에는 이름을 변수로 가진 새로운 변수인 mart_4를 만들어 보자. 

  • id는 c10과 c11
  • first_name은 Kildong, Yongpal 
mart_4 <- data.frame(
  id = c("c10", "c11"), 
  first_name = c("Kildong", "Yongpal"))
mart_4

이번에도 rbind를 사용하여 mart_12와 결합해보자. 

rbind(mart_12, mart_4)

 

이번에도 에러가 발생한다. 친절하게 에러가 발생한 이유가 명시되어 있다. 

 

"이전에 사용된 이름들과 일치하지 않습니다." 

 

즉, 컬럼의 이름이 다르기 때문에 결합되지 않는다. 

 


2) 두 데이터 프레임 좌우 결합

이번에는 데이터 프레임 두 개를 좌우로 결합해 보자. 

mart_5 <- data.frame( 
  age = c(20, 25, 19, 40, 32, 39, 28), 
  income = c(2500, 2700, 0, 7000, 3400, 3600, 2900))
mart_5

 

좌우 결합은 cbind를 사용한다. 

mart125 <- cbind(mart_12, mart_5) # cbind: column bind, 행의 갯수가 일치해야 함
mart125

잘 결합이 되었다. 


3) 두 데이터 프레임 동일 key를 기준으로 결합

이번에는 동일한 데이터를 기준으로 결합을 해보자. 

mart_6 <- data.frame(
  id = c("c03", "c04", "c05", "c06", "c07", "c08", "c09"), 
  buy_cnt = c(3, 1, 0, 7, 3, 4, 1)
)
mart_6

 

앞서 만들었던 mart_12와 결합해 보자. 

mart_126_1 <- cbind(mart_12, mart_6) 
mart_126_1

 

그런데, cbind는 좌우를 그냥 붙이기 때문에 id가 일치하지 않는 경우 에러가 발생한다. 
이를 해결하기 위해 merge() 함수를 사용하여 결합하는 방법이 있다.

  • merge()함수는 두 개 데이터만 결합 가능하다. 
  • marge()함수는 네 가지 옵션을 사용하여 결합할 수 있다. 네 가지 방법은 (1)합집합, (2)교집합, (3)왼쪽 데이터에 맞춰 결합, (4)오른쪽 데이터에 맟춰 결합하는 방법이다. 


(1) 겹치는 데이터만 결합(교집합)

mart_126_inner <- merge( 
  x = mart_12, y = mart_6, by = 'id') 
mart_126_inner


(2) 모든 데이터 결합(합집합)

mart_126_outer <- merge(
  x = mart_12, y = mart_6, by = 'id', all=TRUE) 
mart_126_outer


(3) 왼쪽 데이터에 맞춰 결합

mart_126_left <- merge(
  x = mart_12, y = mart_6, by = 'id', all.x = TRUE) 
mart_126_left

 

(4) 오른쪽 데이터에 맞춰 결합

mart_126_right <- merge(
  x = mart_12, y = mart_6, by = 'id', all.y = TRUE) 
mart_126_right




'R' 카테고리의 다른 글

[R] 선형회귀분석_단순회귀  (1) 2023.11.16
[R] GPT-3.5가 답변한 회귀분석 과정  (0) 2023.11.15
[R] 데이터 처리 - 변수 변환  (0) 2023.09.22
[R] 기술 통계 및 그래프 기초  (0) 2023.09.19
[R] 데이터 관리  (0) 2023.09.18

댓글