본문 바로가기

DataAnalytics/R

하나의 엑셀파일에서 여러 개의 Sheet의 데이터를 합쳐서(merge) 조건에 따라서 추출하기

갑자기 해보고 싶어졌습니다..



오늘 거래처에서 엑셀 데이터를 받았는데, 동일한 형태의 데이터를 18개의 Sheet에 나눠서 들어가 있었습니다.
이제 이 데이터를 가지고 해야하는 것은…일단 모든 데이터를 합쳐서 아래와 같이 3개의 형태로 재분류하는 것 입니다.

  1. T store의 상품번호(AID)만 있는 것,
  2. olleh마켓의 상품번호(CID)만 있는 것,
  3. 둘 다 없는 것

문제는 이번에는 18개 Sheet지만 앞으로 180개가 될 수 있습니다. 즉, 엑셀 Copy and Paste 노가다는 의미가 없다고 생각이 들었습니다. 
그래서… 일단 R studio를 켜고 여기저기 도움을 받아서 아래와 같이 코드를 작성했습니다.

라이브러리와 xls 파일을 불러옴

library(XLConnect)
library(dplyr)

wb <- loadWorkbook("/Users/dusskapark/Desktop/CTN_Paid_Add_AID_20150622.xlsx") #파일주소는 알아서..

18개의 워크시트의 데이터를 불러와서 data에 넣습니다.

data <- Reduce(bind_rows, Map(function(i) { readWorksheet(wb, sheet = i) }, 1:18))

필요한 데이터만 따로 저장합니다.

data2 <- data[,c(4,7,8)] 

#name 변경
names(data2) <- c("ollehCID", "AID", "CID") 

# CID , T storeID 등 잘못된 데이터 값을 일괄 삭제
data3 <- data2 %>% filter(data2$ollehCID != 'CID') 

#column 을 char 로 변경
as.character(data3$AID)
as.character(data3$CID)

dplyr 필터로 데이터를 구분해서 저장

library(dplyr)
Q1 <- data3 %>% filter(nchar(data3$AID) >= 10) 
Q2 <- data3 %>% filter(nchar(data3$CID) >= 14)
Q3 <- data3 %>% filter(nchar(data3$AID) < 10 & nchar(data3$CID) < 14)

#저장한 파일을 CSV로 추출
write.csv(Q1, "/Users/dusskapark/Desktop/Q1.csv", row.names=TRUE)
write.csv(Q2, "/Users/dusskapark/Desktop/Q2.csv", row.names=TRUE)
write.csv(Q3, "/Users/dusskapark/Desktop/Q3.csv", row.names=TRUE)

Sent from My Haroopad
The Next Document processor based on Markdown - Download