일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Rstuido
- 청도요
- 대학원생
- 생물정보학
- 철학
- 탐조
- 에리히 프롬
- 심리학
- 파이썬
- 갓생
- 계묘년
- 생명과학 균학 미생물학 Biology Mycology Microbiology
- 영화 후기
- Cannon PowerShot G7 X Mark III
- mushroom #mushrooms #mushroomhunting #mushroomphotos #mushroomphotography #mycology #mycologist #fungi #fungalecology #fungaldiversity #fantasticfungi #버섯 #탐균 #버섯탐사
- 영화 일기
- 토양미생물학
- RStudio
- 곤줄박이
- 바운새
- 영화 해석
- 젖비단그물버섯
- 토양학
- 영화 리뷰
- 더 웨일
- 외생균근균
- 코딩
- 둠칫새
- 영화
- R
Archives
- Today
- Total
워라밸 중독자
[R] 데이터 전처리 - 결합 (cbind, rbind, merge) 본문
cbind(), rbind(), merge() 함수
cbind()
두 개 이상의 벡터/행렬/데이터프레임을 열(column) 방향으로 결합. 행의 이름과 개수가 같아야함.
# 벡터와 벡터의 열방향 결합 => 행렬 (matrix)
> x1 <- c(1,2,3,4) # 벡터
> x2 <- c("a","b","c","d") # 벡터
> x3 <- c(T,F,F,F) # 벡터
> x <- cbind(x1,x2,x3)
> x
x1 x2 x3
[1,] "1" "a" "TRUE"
[2,] "2" "b" "FALSE"
[3,] "3" "c" "FALSE"
[4,] "4" "d" "FALSE"
> class(x)
[1] "matrix" "array"
# 데이터프레임과 벡터의 열방향 결합
> df1 <- data.frame(x1,x2,x3) # 데이터프레임
> y1 <- c(5,6,7,8) # 벡터
> cbind(df1,y1)
x1 x2 x3 y1
1 1 a TRUE 5
2 2 b FALSE 6
3 3 c FALSE 7
4 4 d FALSE 8
# 데이터프레임과 데이터프레임의 열방향 결합
> y2 <- c("a","b","e","f")
> y3 <- c(F,T,T,F)
> df2 <- data.frame(y1,y2,y3) # 데이터프레임
> cbind(df1,df2)
x1 x2 x3 y1 y2 y3
1 1 a TRUE 5 a FALSE
2 2 b FALSE 6 b TRUE
3 3 c FALSE 7 e TRUE
4 4 d FALSE 8 f FALSE
*위 예시에서는 행 이름을 지정하지 않았기 때문에 이름과 상관 없이 잘 결합됨.
rbind()
두 개 이상의 벡터/행렬/데이터프레임을 행(row) 방향으로 결합. 열의 이름과 개수가 같아야함.
# 열 이름이 같은지 확인
> colnames(df1)
[1] "x1" "x2" "x3"
> colnames(df2)
[1] "y1" "y2" "y3"
> rbind(df1,df2)
# 열 이름이 일치하지 않는 경우 => Error 발생
> rbind(df1,df2)
Error in match.names(clabs, names(xi)) :
이전에 사용된 이름들과 일치하지 않습니다.
# 열 이름이 일치하는 경우
> rbind(df1,df1)
x1 x2 x3
1 1 a TRUE
2 2 b FALSE
3 3 c FALSE
4 4 d FALSE
5 1 a TRUE
6 2 b FALSE
7 3 c FALSE
8 4 d FALSE
merge()
merge 함수는 두 개의 데이터프레임을 공통된 열의 행 값(key)을 기준으로 결합 (두 개 이상의 데이터셋에서는 사용 불가).
매개변수에 따라 inner join, outer join, left join, right join 으로 다양하게 활용할 수 있다.
#앞의 df1, df2 에 key로 쓰일 열 지정
> df1 <- cbind(df1, "key.col"=c("A","B","C","D"))
> df2 <- cbind(df2, "key.col"=c("A","B","E","F"))
> df1
x1 x2 x3 key.col
1 1 a TRUE A
2 2 b FALSE B
3 3 c FALSE C
4 4 d FALSE D
> df2
y1 y2 y3 key.col
1 5 e FALSE A
2 6 f TRUE B
3 7 g TRUE E
4 8 h FALSE F
## df1과 df2의 공통된 열인 key.col 열의 값을 기준으로 병합
# inner join: 두 데이터프레임의 key를 기준으로 교집합
> merge(df1, df2, by = "key.col")
key.col x1 x2 x3 y1 y2 y3
1 A 1 a TRUE 5 e FALSE
2 B 2 b FALSE 6 f TRUE
# outer join: 두 데이터프레임의 key를 기준으로 합집합
> merge(df1, df2, by = "key.col", all = T)
key.col x1 x2 x3 y1 y2 y3
1 A 1 a TRUE 5 e FALSE
2 B 2 b FALSE 6 f TRUE
3 C 3 c FALSE NA <NA> NA
4 D 4 d FALSE NA <NA> NA
5 E NA <NA> NA 7 g TRUE
6 F NA <NA> NA 8 h FALSE
# left join: 왼쪽(x) 데이터프레임의 key를 기준으로 병합
> merge(df1, df2, by = "key.col", all.x = T)
key.col x1 x2 x3 y1 y2 y3
1 A 1 a TRUE 5 e FALSE
2 B 2 b FALSE 6 f TRUE
3 C 3 c FALSE NA <NA> NA
4 D 4 d FALSE NA <NA> NA
# right join: 오른쪽(y) 데이터프레임의 key를 기준으로 병합
> merge(df1, df2, by = "key.col", all.y = T)
key.col x1 x2 x3 y1 y2 y3
1 A 1 a TRUE 5 e FALSE
2 B 2 b FALSE 6 f TRUE
3 E NA <NA> NA 7 g TRUE
4 F NA <NA> NA 8 h FALSE
'코딩, 딱 지금이 시작할때! (코딱지)' 카테고리의 다른 글
[R] 인덱싱(indexing) - 데이터에서 원하는 값 추출 (0) | 2023.01.12 |
---|---|
[R] 데이터프레임 쓰기 및 읽기 - read.table(), write.table() (0) | 2023.01.07 |
[R] 2차원 데이터 구조 - 행렬(matrix)과 데이터프레임(dataframe) (1) | 2023.01.06 |
[R] 1차원 데이터 구조 - 팩터(factor)와 리스트(list) (0) | 2023.01.06 |
[R] 데이터 구조 종류 및 확인 (스칼라, 벡터, 팩터, 리스트 / 행렬, 데이터프레임 / 배열) (0) | 2023.01.06 |