데이터 정렬
앞에 글에서 생성했던 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 |
댓글