데이터 처리 도구/R

R 기초 / 패키지 사용하기

yourhm 2022. 8. 10. 10:52

패키지 설치하고 로드하기

install.packages('패키지 이름')  # 패키지 설치
library('패키지 이름')           # 패키지 로딩

설치할 때

- install.packages('reshape') :  따옴표 사용해서 문자열로 입력해야한다.

 

로드할 때는 둘다 가능

- library('reshape') : 따옴표 사용해서 문자열로 입력 가능

- library(reshape) : 따옴표 없이 패키지 이름을 바로 입력 가능

 

 

reshape 패키지: melt, cast

1) 패키지 및 데이터 불러오기

# 패키지 설치 및 로딩
install.package('reshape')
library(reshape)

# 예시 데이터 로딩
data(airquality)
names(airquality)
colnames(airquality) <- tolower(colnames(airquality))
names(airquality)

data( )

names( ) : 데이터셋의 컬럼 확인하기

colnames( ): 데이터셋의 컬럼명을 확인하기

tolower( ) : 모든 문자열을 소문자로 변환하기

 

 


2) melt

# melt(data, id= , [])

ex1 <- melt(airquality, id=c('month', 'day'), na.rm=TRUE)

- 기준 컬럼: month, day ➡️ id 에 지정하기

- 나머지 컬럼(ozone, solar.r, wind, temp) 들은 'variable', 'value' 를 통해 길게 쌓인다.

- na.rm = TRUE : NA 값은 제거하는 옵션

 

 

 

 

3) cast

# cast(data, formula= , fun.aggregate=NULL, margins=NULL, subset=NULL)

ex2 <- cast(ex1, day~month~variable)
ex3 <- cast(ex1, month~variable, mean)
ex4 <- cast(ex1, month~variable, mean, margins=c('grand_row', 'grand_col'))
ex5 <- cast(ex1, day~month, mean, subset=variable=='ozone')
ex6 <- cast(ex1, month~variable, range)  # min, max

- melt로 길게 녹인 데이터를 다시 wide한 형태로 바꾸려면 cast 함수를 사용하자.

formula fun.agg margins / subset 의미
day~
month~
variable
X X 행:day, 열:month 인 matrix가
variable별로 생김 (3차원)
month~
variable
mean X 행:month, 열:variable
-> 각 컬럼별 month 평균 계산
month~
variable
mean margins = c('grand_row', 'grand_col') 행:month, 열:variable
-> 각 컬럼별 month 평균 계산, 합계
day~
month
mean subset = variable=='ozone' 행:day, 열:month
-> 'ozone' 컬럼에 대해서만 평균 계산
month~
variable
range X 행:month, 열:variable
-> 각 컬럼별 month 최소(_X1), 최대값(_X2)

 

 

4) 개념도 그림

자료 출처: https://www.r-statistics.com/2012/01/aggregation-and-restructuring-data-from-r-in-action/

 

 

sqldf 패키지

1) 패키지 및 데이터 불러오기

install.packages('sqldf')
library(sqldf)

rm(list=ls())
data(iris)

 

2) SQL 쿼리 사용하여 데이터 조회

data1 <- sqldf('SELECT * FROM iris')
a1 <- sqldf('SELECT * FROM iris LIMIT 5')
a2 <- sqldf('SELECT COUNT(*) FROM iris WHERE species LIKE "%sa"')

 

 

plyr 패키지

1) 함수 종류

데이터 타입 array dataframe list nothing
array aaply adply alply a_ply
dataframe daply ddply dlply d_ply
list laply ldply llply l_ply
n replicates raply rdply rlply r_ply
function arguments maply mdply mlply m_ply

 

- 함수이름은 5개의 문자열로 구성 ➡️ [입력 데이터 타입] [출력 데이터 타입] p l y

- apply 함수와 작동 방식이 비슷함 (split - apply - combine)

 

 

2) 패키지 불러오기

library(plyr)
rm(list=ls())

 

3) ddply

set.seed(1)
df <- data.frame(year=rep(2019:2022, each=5), count=round(runif(20, 1, 40)))

a1 <- ddply(df, 'year', function(x){
  mean.count = mean(x$count)
  sd.count = sd(x$count)
  cv = sd.count/mean.count
  data.frame(m.count=mean.count, s.count=sd.count, cv.count=cv)
})
a2 <- ddply(df, .(year), summarise, mean.count=mean(count))
a3 <- ddply(df, .(year), transform, total.count=sum(count))

- 데이터프레임을 분할하고, 함수에 적용하여 결과를 데이터프레임으로 반환한다.

 

[포맷]

ddply(데이터, .(그룹핑 기준 변수명), ddply 내부함수, 적용할 함수)

 

- 그룹핑 기준 변수명: 'year' or .(year) -> 둘다 입력 가능

- ddply 내부함수: summaries, transform, mutate, subset

 

 

4) adply

df2 <- data.frame(A=c(1,2,3,4), B=c(4,5,6,7), C=c(1,3,5,7))

a4 <- adply(df2, 1, sum)  # row sum
a5 <- adply(df2, 2, sum)  # col sum

[포맷]

adply(데이터, 적용방향, 적용할 함수)

 

- 입력 데이터: 2차원 데이터셋(array, matrix, dataframe)

- 적용방향: 1(행), 2(열)

 

 

패키지 종류

1) reshape

2) reshape2

3) sqldf

4) plyr

 

 

'데이터 처리 도구 > R' 카테고리의 다른 글

R 기초 / 제어문, 사용자 정의 함수  (0) 2022.08.11
R 기초 / apply 함수  (0) 2022.08.09
R 기초 / 연산자  (0) 2022.08.07