###### data.table 패키지는 대용량 데이터 처리를 매우 빠르게 처리시켜주는 패키지입니다.
###### 데이터 전처리하는데에 매우 도움을 주는 패키지이니 숙지하고 계시면 편합니다.
###########original 방법
mtcars[1:2,] ## 1행부터 2행까지 출력, (열은 전부)
mtcars[1:2,c(3,5)] ##1행부터 2행까지 열은 3열과 5열 출력
mtcars[mtcars$mpg >30,] ## mpg가 30초과인 행, 열은 전부
mtcars[mtcars$mpg > 30 & mtcars$cyl == 4, 10:11] ##mpg가 30초과이면서 cyl이 4인 행 그리고 열은 10부터 11열까지
tapply(mtcars$mpg, mtcars$am, mean) ## am 그룹 별 평균
aggregate(mpg~am+cyl,data=mtcars,mean) ## am, cyl 그룹별 평균
table(transmission=mtcars$am, cylinder=mtcars$cyl) ## am/cyl 빈도수
library(data.table)
dt <- data.table(mtcars)
class(dt)
dt[,mean(mpg)] # 칼럼이름으로 바로 함수 적용 가능 / mpg평균
mtcars[,mean(mpg)] # 일반적인 dataframe에는 적용 불가능 / 에러 출력
#######################
## Data[i,j,by] Data[subset Row, subset Column, Within Group]
dt[,mean(mpg),by=am] ## am별 mpg 평균
## tapply(mtcars$mpg, mtcars$am, mean) 와 같은 결과
dt[,mean(mpg),by=.(am,cyl)] ## am별 cyl 별 mpg 평균
## aggregate(mpg~am+cyl,data=mtcars,mean) 와 같은 결과
dt[,.(avg=mean(mpg)),by=.(am,cyl)] ## mpg평균의 label을 avg로 붙임
dt[mpg > 20,.(avg=mean(mpg)),by=.(am,cyl)] ## mpg20 초과 인 데이터 중 am별 cyl별 mpg 평균
dt[,.N] ## nrow(dt)
dt[,.N,by=cyl] ## cyl별 빈도수 table(dt$cyl)
dt[wt > 1.5, .(count=.N), by=am] ## wt 가 1.5 이상인것 중 am별 count
dt[wt > 1.5, .N, by=am] ## 같은결과 label만 없음
dt[order(-mpg)][1:5] ## mpg순으로 정렬(내림차)
dt[order(-mpg,-wt)][1:5] ## mpg, wt순으로 정렬(내림차순)
dt[,.(mpg,wt,vs,am)] ## 네개의 칼럼
dt[,!("mpg")] ## mpg제외
dt[,!c("mpg","wt","vs")] ## mpg, wt, vs제외
setnames(dt,c("wt"),c("wt2")) ## column이름 재 설정
dt
mydata = fread("https://github.com/arunsrinivasan/satrdays-workshop/raw/master/flights_2014.csv")
setkey(mydata, origin) ## origin is key
system.time(mydata[origin %in% c("JFK", "LGA")])
system.time(mydata[c("JFK", "LGA")]) # more fast
setkey(mydata, origin, dest)
mydata[.("JFK", "MIA")] ## origin = JFK, dest = MIA
mydata[origin == "JFK" & dest == "MIA"] ## same code
key(mydata)
mydata01 = setorder(mydata, origin) ## sorting(오름차순)
mydata02 = setorder(mydata, -origin) ## 내림차순
mydata[, dep_sch:=dep_time - dep_delay] ## dep_sch 칼럼추가
mydata[, c("dep_sch","arr_sch"):=list(dep_time - dep_delay, arr_time - arr_delay)] ## multi column 추가
mydata[, dep_sch:=dep_time - dep_delay][,.(dep_time,dep_delay,dep_sch)]
mydata[, .(mean = mean(arr_delay, na.rm = TRUE), ## arr_delay에 대한 통계 뽑기
median = median(arr_delay, na.rm = TRUE),
min = min(arr_delay, na.rm = TRUE),
max = max(arr_delay, na.rm = TRUE))]
mydata[, lapply(.SD, mean), .SDcols = c("arr_delay", "dep_delay")] ## SD = Subset of Data
## arr_dely와 dep_deplay의 평균
mydata[, lapply(.SD, mean)]
mydata[, sapply(.SD, function(x) c(mean=mean(x), median=median(x)))]
mydata[, .(mean_arr_delay = mean(arr_delay, na.rm = TRUE)), by = origin] ## origin으로 묶으서 mean_arr_delay 평균
# origin mean_arr_delay
# 1: LGA 6.601968
# 2: JFK 7.731465
# 3: EWR 10.026121
mydata[, .(mean(arr_delay, na.rm = TRUE), mean(dep_delay, na.rm = TRUE)), by = origin]
# origin V1 V2
# 1: LGA 6.601968 10.60500
# 2: JFK 7.731465 11.44617
# 3: EWR 10.026121 15.21248
setkey(mydata, "carrier") ## carrier 변수에 대해 중복제거
unique(mydata)
setkey(mydata, NULL) ## 모든 변수에 대해 중복제거
unique(mydata)
mydata[, .SD[1:2], by=carrier] ## carrier 변수 별 1,2번째 데이터 보이기
mydata[, .SD[.N], by=carrier] ## carrier 변수별 마지막 데이터 보이기
dat = mydata[, cum:=cumsum(distance), by=carrier] ## carrier별 distance 누적합계
data.table(dat)
DT <- data.table(A=1:5)
DT[ , X := shift(A, 1, type="lag")]
DT[ , Y := shift(A, 1, type="lead")]
DT
# A X Y
# 1: 1 NA 2
# 2: 2 1 3
# 3: 3 2 4
# 4: 4 3 5
# 5: 5 4 NA
DT = data.table(x=6:10)
DT[x %between% c(7,9)]
DT = data.table(Name=c("dep_time","dep_delay","arrival"), ID=c(2,3,4))
DT[Name %like% "dep"] ## dep이 들어간 글자만 찾기
(dt1 <- data.table(A = letters[rep(1:3, 2)], X = 1:6, key = "A"))
(dt2 <- data.table(A = letters[rep(2:4, 2)], Y = 6:1, key = "A"))
merge(dt1, dt2, by="A") # merge
merge(dt1, dt2, by="A", all.x = TRUE) # left join
merge(dt1, dt2, by="A", all.y = TRUE) # right join
merge(dt1, dt2, all=TRUE) # full join
'R중급' 카테고리의 다른 글
[Reduce함수/R] 여러 개 Matrix 한번에 sum/mean 시키기 (0) | 2020.06.19 |
---|---|
[R프로그래밍] R에서 함수내부 변수 외부에서 사용하는 방법 (0) | 2020.01.29 |
[ R프로그래밍] R에서 여러개의 변수 한번에 선언하는 방법 (0) | 2020.01.29 |
R프로그래밍 문자열 찾는 방법( str_detect, %in%, 응용) (0) | 2020.01.29 |
Keras R Accuracy History 보기 (0) | 2018.04.21 |
댓글