일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- working directory
- TXT
- ROTTEN TOMATOES
- 함수
- Names
- :
- 데이터 타입
- 데이터 입출력
- 데이터 타입의 우선순위
- stringr
- 변수 선언
- 정규표현식
- scraping
- length
- Data Structure
- CSV
- vector 연산
- REP
- vector 비교
- R 개요
- data frame
- seq
- R 기초
- factor
- 문자열처리
- c()
- 스크래핑
- Crawling
- 네이버 영화 댓글
- 연습문제
- Today
- Total
study blog
reshape2 패키지로 데이터 형태 변환 본문
reshape2 패키지로 데이터 형태 변환
- 데이터의 형태를 바꿀 수 있음 -> 가로로 되어있는 데이터를 세로로 바꿀 수 있어요!
- 컬럼으로 저장되어 있는 데이터를 row 형태로 / row 형태의 데이터를 column형태로 전환
실습을 통해 이해해보자! (melt_mpg.csv, sample_mpg.csv)
library(ggplot2)
library(stringr)
library(dplyr)
sample_mpg <- read.csv(file="C:/R_lecture/data/sample_mpg.csv",
sep=",", header=T, # 둘 다 default값
fileEncoding="UTF-8") # 한글 사용할 때는 꼭 써줘야 함!
melt_sample_mpg <- read.csv(file="C:/R_lecture/data/melt_mpg.csv",
sep=",", header=T,
fileEncoding="UTF-8")
[연습문제] 두 개의 data frame 각각에 대해서 평균 도시 연비 구하기
# 방법1
mean(melt_sample_mpg$value[melt_sample_mpg$variable=="cty"])
# 방법2
mean(sample_mpg$cty) #18.25
# 방법3
melt_sample_mpg %>%
filter(variable==”cty”) %>%
summarise(avg_rate=mean(value)) #18.25
[연습문제] 두 개의 data frame에 대해서 평균 연비를 구해서 표시 (평균연비=도시연비,고속도로연비 평균)
# sample_mpg의 평균 연비 구하기
sample_mpg %>%
mutate(avg_rate=(cty+hwy)/2) #각 칼럼의 평균 나올 것!
# melt_sample_mpg의 평균 연비 구하기
구현 자체가 매우 힘듦! -> reshape2 패키지 이용하여 데이터프레임의 형태를 바꿔보자.
# 형태를 바꾸는 패키지 : reshape2
- 수집한 데이터를 분석하기 편한 형태로 가공할 때 사용하는 대표적인 패키지
- reshape2에서는 2개의 함수만 잘 알아두면 됨!
1) melt()
- melt(데이터프레임, id.vars=”녹이지 않을 열”,measure.vars=”녹일 열”)
- column을 row형태로 바꾸어서 가로로 긴 데이터를 세로로 길게 변환하는 함수
- melt()의 기본동작은 numeric을 포함하고 있는 모든 column을 row로 변환함
- 간단한 예를 통해서 melt()의 동작방식을 알아보자!
install.packages("reshape2"); library(reshape2)
ls(airquality) # 컬럼명
df<- airquality # 153행, 6열
melt(df) # id없이 생성. 모든 numeric들을 다 이용해서 melt함 #153*6 =918행
nrow(melt(df,na.rm=T)) # 결측치 제외 -> 874행
melt(df, id.vars="Month") # id.vars: 녹이지 말아야 할 열. # 153*5 = 765행
melt(df, id.vars=c("Month","Day")) # 153*4 = 612행
melt_df <- melt(df,
id.vars=c("Month","Day"),
measure.vars="Ozone", # measure.vars: 녹일 열
variable.name="Item", # 열의 이름 변경할 수 있음
value.name = "Item_value")
2) dcast() : data frame에 대한 cast 작업. row로 되어 있는 데이터를 column형태로 전환
일반적으로 많이 사용. reshape2를 이용하는 이유.
cf) acast() : 벡터 다룰 때 # melt후 겹치는 데이터 있는 경우 다시 cast하기 어려움.
dcast(melt_df,
formula=Month~Item, # 복구시킨 데이터프레임에 있어야 하는 것들~melt된 열
#Month~… # 이렇게 쓰는 것도 가능 (...: 나머지 다라는 의미)
fun=mean, # 집계함수를 이용한 데이터 프레임 구성.
na.rm=T)
# 처음에 받은 csv 파일의 내용을 dcast를 이용하여 복구시켜보자.
dcast(melt_sample_mpg,
formula=manufacturer+model+class+trans+year~variable,
value.var= "value") # melt된 데이터 값 여기에 있다.
결과: 오류 Aggregation function missing: defaulting to length (원래 있던 컬럼들이 유니크하지 않아서 문제)
→ melt_sample_mpg에서 우리가 합칠 variable,value를 제외한 값들이 유니크해야하는데 동일한게 존재해서 제대로 복구시킬 수 없다.
# melt를 복구하는 dcast 연습을 하기 위해 melt된 데이터를 생성해 보자!
# mpg를 가지고 melt data set을 생성해 보자.
df <- as.data.frame(mpg); head(df)
audi_df <- df %>%
filter(manufacturer=="audi"& model=="a4")
melt_audi_df <- melt(audi_df,
id.vars=c("manufacturer","model","year","cyl","trans"),
measure.vars=c("displ","cty","hwy"))
# dcast 실행해 보자.
dcast(melt_audi_df,
formula=manufacturer+model+year+cyl+trans~variable,
value.var="value")
'R > 3. 데이터 조작' 카테고리의 다른 글
dataframe 조작 - R내장 함수, plyr, dplyr (0) | 2020.01.14 |
---|---|
R에서 JSON 데이터 처리(jsonlite, httr 패키지) (0) | 2020.01.12 |