티스토리 뷰
데이터의 n번째 이전(이후) 행의 값 가져오기
data.table::shift()
shift(x, # 벡터(원본 데이터)
n=1L, # 몇 번째 이전(이후)값을 가져올지 지정
fill=NA, # 채울 값이 없을 경우 default값 설정
type=c("lag", "lead"), # 이전 값을 가져올지 이후 값을 가져올지
give.names=FALSE) # 값 이름 지정
### delivery_02.csv 파일을 읽고
> del <- read.csv('delivery_02.csv', stringsAsFactors = F)
> str(del)
> head(del)
일자 시간대 업종 시도 시군구 읍면동 통화건수
1 20180201 0 음식점-족발/보쌈전문 서울특별시 강남구 논현동 5
2 20180201 0 음식점-족발/보쌈전문 서울특별시 강남구 역삼동 5
3 20180201 0 음식점-족발/보쌈전문 서울특별시 강서구 내발산동 5
### 1) 일자별 총 통화건수와 전일대비 증감률 출력 = (오늘 - 이전) / 이전 * 100
# (연산은 행 별로 수행하므로, 연산하고자하는 값이 같은 행에 있어야 함)
> library(plyr)
> df2 <- ddply(del, .(일자), summarise, sum = sum(통화건수))
> df2
일자 sum
1 20180201 39653
2 20180202 46081
3 20180203 54124
...
> install.packages('data.table')
> library(data.table)
> shift(df2$sum, fill = df2$sum[1]) # 1번째 이전 값 가져오기, 채울 값이 없을 경우, sum 컬럼의 첫 번째 값 가져오기
[1] 39653 39653 46081 54124 50323 35023 38628 39371 40153 49116 54101 50795 36734 43097 45282 28201 16570 34789 43692 34259 38036 39381 42309 50270 53415 51286 36141 38783
> shift(df2$sum, n = 2) # 2번째 이전 값 가져오기
[1] NA NA 39653 46081 54124 50323 35023 38628 39371 40153 49116 54101 50795 36734 43097 45282 28201 16570 34789 43692 34259 38036 39381 42309 50270 53415 51286 36141
> shift(df2$sum, type = 'lead') # 1번째 이후 값 가져오기
[1] 46081 54124 50323 35023 38628 39371 40153 49116 54101 50795 36734 43097 45282 28201 16570 34789 43692 34259 38036 39381 42309 50270 53415 51286 36141 38783 52323 NA
> shift(df2$sum, ,n = 2, type = 'lead') # 2번째 이후 값 가져오기
[1] 54124 50323 35023 38628 39371 40153 49116 54101 50795 36734 43097 45282 28201 16570 34789 43692 34259 38036 39381 42309 50270 53415 51286 36141 38783 52323 NA NA
참고: KIC 캠퍼스 머신러닝기반의 빅데이터분석 양성과정
'R > Process' 카테고리의 다른 글
[R] 데이터 테이블(data table) -key, index (0) | 2019.01.14 |
---|---|
[R] 데이터들의 순위 출력 - rank (0) | 2019.01.13 |
[R] 데이터 내 NA를 이전 행의 값으로 치환하기 (0) | 2019.01.09 |
[R] 교차 테이블로 데이터 구조 변경하기 - melt, dcast 함수 (2) | 2019.01.08 |
[R] R에서 SQL문법으로 데이터 조작하기 - sqldf 패키지 (0) | 2019.01.08 |