Programming/R
[R기초] 데이터 재구조화
aram
2023. 7. 27. 12:27
merge(병합)
- 두 개의 데이터프레임을 합하는 기능. 컬럼을 기준으로 데이터 병합
- merge(A, B) : 컬럼명의 값이 같은 데이터만 병합
- merge(A, B, by="key컬럼") : merge의 key값이 같은 데이터만 병합 [inner join]
cust_id <- c("c01","c02","c03","c04","c05","c06","c07")
last_name <- c("Kim","Lee","Choi","Park","Bae","Kim","Lim")
cust1 <- data.frame(cust_id, last_name)
# cust_id last_name
# 1 c01 Kim
# 2 c02 Lee
# 3 c03 Choi
# 4 c04 Park
# 5 c05 Bae
# 6 c06 Kim
# 7 c07 Lim
cust2 <- data.frame(cust_id=c("c05","c06","c07","c08","c09")
, last_name=c("Bae","Kim","Lim2","Cho","Yoo"))
# cust_id last_name
# 1 c05 Bae
# 2 c06 Kim
# 3 c07 Lim
# 4 c08 Cho
# 5 c09 Yoo
cust3 = merge(cust1, cust2)
# cust_id last_name
# 1 c05 Bae
# 2 c06 Kim
cust3 = merge(cust1, cust2, by="cust_id")
# cust_id last_name.x last_name.y
# 1 c05 Bae Bae
# 2 c06 Kim Kim
# 3 c07 Lim Lim2
- [full outer join] : merge(A, B, by="key컬럼", all=TRUE) key를 기준으로 모든 데이터 병합
cust4 = merge(cust1, cust2, by="cust_id", all=TRUE)
# cust_id last_name.x last_name.y
# 1 c01 Kim <NA>
# 2 c02 Lee <NA>
# 3 c03 Choi <NA>
# 4 c04 Park <NA>
# 5 c05 Bae Bae
# 6 c06 Kim Kim
# 7 c07 Lim Lim2
# 8 c08 <NA> Cho
# 9 c09 <NA> Yoo
- [left outer join] : merge(A, B, by="key컬럼", all.x=TRUE) key를 기준으로 모든 x데이터만 병합
cust5 = merge(cust1, cust2, by="cust_id", all.x=TRUE)
cust5
# cust_id last_name.x last_name.y
# 1 c01 Kim <NA>
# 2 c02 Lee <NA>
# 3 c03 Choi <NA>
# 4 c04 Park <NA>
# 5 c05 Bae Bae
# 6 c06 Kim Kim
# 7 c07 Lim Lim2
- [right outer join] : merge(A, B, by="key컬럼", all.y=TRUE) key를 기준으로 모든 y데이터만 병합
cust6 = merge(cust1, cust2, by="cust_id", all.y=TRUE)
cust6
# cust_id last_name.x last_name.y
# 1 c05 Bae Bae
# 2 c06 Kim Kim
# 3 c07 Lim Lim2
# 4 c08 <NA> Cho
# 5 c09 <NA> Yoo
python의 concat과 같은 기능 - 단순히 붙이는 기능
- rbind() : dataframe 행 추가
df1 = data.frame(name=c('apple', 'banana','cherry'), price=c(300,200,100))
# name price
# 1 apple 300
# 2 banana 200
# 3 cherry 100
# 행추가
df2 <- data.frame(name=c('mango','berry'), price=c(400, 500))
df1 <- rbind(df1, df2)
# name price
# 1 apple 300
# 2 banana 200
# 3 cherry 100
# 4 mango 400
- cbind() : dataframe 열 추가
# 열추가. 행 수가 같아야함
df1 <- cbind(df1, data.frame(qty=c(10,20,30,40,50)))
df1
# name price
# 1 apple 300
# 2 banana 200
# 3 cherry 100
# 4 mango 400
# 5 berry 500
subset
- subset(data, select=컬럼명|vector) : 부분 데이터만 리턴
- select = -컬럼 : -를 하면 해당 컬럼 제외하고 나머지 리턴
no <- c(1,2,3,4,5)
name <- c('서진수','주시현','최경우','이동근','윤정웅')
address <- c('서울','대전','포항','경주','경기')
tel <- c(1111,2222,3333,4444,5555)
hobby <- c("독서","미술","여행","요리","운동")
member <- data.frame(NO=no, NAME=name, ADDRESS=address, TEL=tel, HOBBY=hobby)
member
# NO NAME ADDRESS TEL HOBBY
# 1 1 서진수 서울 1111 독서
# 2 2 주시현 대전 2222 미술
# 3 3 최경우 포항 3333 여행
# 4 4 이동근 경주 4444 요리
# 5 5 윤정웅 경기 5555 운동
#번호, 이름, 전화번호만 저장
member2 <- subset(member, select=c(NO,NAME,TEL))
member2
# NO NAME TEL
# 1 1 서진수 1111
# 2 2 주시현 2222
# 3 3 최경우 3333
# 4 4 이동근 4444
# 5 5 윤정웅 5555
# 취미만 제외
member3 <- subset(member, select=-HOBBY)
member3
# NO NAME ADDRESS TEL
# 1 1 서진수 서울 1111
# 2 2 주시현 대전 2222
# 3 3 최경우 포항 3333
# 4 4 이동근 경주 4444
# 5 5 윤정웅 경기 5555
* 내용참고&출처 : 태그의 수업을 복습 목적으로 정리한 내용입니다.
728x90