1) 가로로 합치기 - 컬럼 이어 붙이기
관계형 데이터 베이스처럼 여러 테이블에 나누어져 데이터들을 join해서
하나의 데이터 프레임으로 만드는 방법
2) 세로로 합치기 - 행을 이어 붙이기
어떤 데이터가 행의 갯수가 너무 많아서 여러개의 파일로 쪼개져 있을 경우, 다시 하나의 데이터프레임으로 합치는 것.
# 두개의 데이터 프레임을 join해서 하나의 데이터 프레임으로 생성
> total <- left_join(midterm,final)
Joining, by = "id"
>total <- left_join(midterm,final, by='id')
메세지 없이 실행됨
# join의 종류들
df1 = data.frame(id = c(1,2,3,4), var1 = c(11,22,33,44))
df2 = data.frame(id = c(1,2,3,5), var2 = c(50,60,70,80))
#inner join :
> inner_join(df1, df2, by= 'id')
id var1 var2
1 1 11 50
2 2 22 60
3 3 33 70
NA : Not Available
#left join :
> left_join(df1, df2, by='id')
id var1 var2
1 1 11 50
2 2 22 60
3 3 33 70
4 4 44 NA
#right join :
> right_join(df1, df2, by='id')
id var1 var2
1 1 11 50
2 2 22 60
3 3 33 70
4 5 NA 80
#full join :
> full_join(df1, df2, by='id')
id var1 var2
1 1 11 50
2 2 22 60
3 3 33 70
4 4 44 NA
5 5 NA 80
#csv파일을 읽어서 데이터 프레임 생성
>exam = read.csv('data/csv_exam.csv')
# 각 반 선생님 이름을 저장하고 있는 데이터 프레임
>teachers = data.frame(class=c(1:5),
teacher=c('aa','bb','cc','dd','ee'))
# exam과 teachers를 합쳐서 하나의 데이터 프레임을 생성
>left_join(exam,teachers,by="class")
id class math english science teacher
1 1 1 50 98 50 aa
2 2 1 60 97 60 aa
3 3 1 45 86 78 aa
4 4 1 30 98 58 aa
5 5 2 25 80 65 bb
6 6 2 50 89 98 bb
7 7 2 80 90 45 bb
8 8 2 90 78 25 bb
9 9 3 20 98 15 cc
10 10 3 50 98 45 cc
11 11 3 65 65 65 cc
12 12 3 45 85 32 cc
13 13 4 46 98 65 dd
14 14 4 48 87 12 dd
15 15 4 75 56 78 dd
16 16 4 58 98 65 dd
17 17 5 65 68 98 ee
18 18 5 80 78 90 ee
19 19 5 89 68 87 ee
20 20 5 78 83 58 ee
# 데이터 프레임을 세로로 합치기(행 추가하기)
> group1 = data.frame(id=c(1, 2, 3), data = c(10, 20, 30))
> group1
id data
1 1 10
2 2 20
3 3 30
> group2 = data.frame(id = c(4,5,6,7,8),
data = seq(40,80,10))
> group2
id data
1 4 40
2 5 50
3 6 60
4 7 70
5 8 80
# group1과 group2 세로로 이어 붙이기
> group_total = bind_rows(group1, group2)
> group_total
id data
1 1 10
2 2 20
3 3 30
4 4 40
5 5 50
6 6 60
7 7 70
8 8 80
# 컬럼수가 다른 경우 세로로 이어 붙이기
> g1 = data.frame(id=c(1:5),
+ var1=seq(10,50,10),
+ var2=seq(11,15))
> g2 = data.frame(id=c(6:10),
+ var1=seq(60,100,10))
> group_total2 = bind_rows(g1,g2)
> group_total2
id var1 var2
1 1 10 11
2 2 20 12
3 3 30 13
4 4 40 14
5 5 50 15
6 6 60 NA
7 7 70 NA
8 8 80 NA
9 9 90 NA
10 10 100 NA
# df1과 df2 가로로 이어 붙이기
> df_bind=bind_cols(df1,df2)
> df_bind
id var1 id1 var2
1 1 11 1 50
2 2 22 2 60
3 3 33 3 70
4 4 44 5 80