빅데이터 공부/R

R 단축키, 변수 생성, 타입확인, 형변환함수

김 리안 2022. 7. 25. 17:04

# [ 단축키 ]
# - ctrl + enter : 명령어 단위 실행
# - ctrl + shift + c : 주석 처리 / 해제
# - ctrl + o : 파일열기

df1 <- read.csv('emp.csv')         # 로딩 가능
sum(df1$SAL)

# 변수
# 상수나 명령어의 결과를 저장하기 위한 객체(이름 부여)
# 변수 명명규칙 : 숫자 시작 불가, 예약어 사용 불가, 특수기호 사용 자제(_가능)
#                 한 자리의 변수 비추

# 1. 생성
a1 <- 1
a1 + 3

a2 <- 'abcd'           # 문자열 : '', "" 로 전달
a3 <- '2022/7/14'      # 날짜가 아닌 문자로 인식
a4 <- Sys.Date()

# 2. 변수 타입 확인
class(a1)
class(a2)
class(a3)
class(a4)

# 3. 산술 연산
a1 + 100
a5 <- '10'

a1 + a5        # 연산 에러(문자와 숫자 연산불가, 묵시적 형 변환 불가)

# 4. 형 변환 함수
# 1) as.Date() : 날짜로의 파싱
a3 <- as.Date(a3)       # 포맷 생략 가능
class(a3)               # 날짜 타입 

as.Date('07/14/2022')               # 년월일 순서가 아닌 경우 자동 파싱 불가(포맷 전달 필수)
as.Date('07/14/2022', '%m/%d/%Y')   # 파싱 가능

# 참고 - 날짜 포맷 확인 방법
help("strftime")      # 날짜 포맷 확인 가능

# strftime : str <- time(f:format)
# strptime : str -> time(p:parsing)

# %Y : 4자 연도
# %y : 2자 연도
# %m : 월
# %d : 일
# %H : 시
# %M : 분
# %S : 초 
# %w : 요일(숫자, 0:일요일)
# %A : 요일(문자)

# 2) as.character() : 문자로 아닌 값을 문자로 변경
as.character(a3, '%w')           # 4(목요일)
as.character(a3, '%A')           # 목요일
as.character(a3, '%Y/%m/%d')     # 문자 리턴

# 3) as.numeric() : 문자로 숫자로 변경
a1 + as.numeric(a5)    # 연산 가능


# 오늘의 날짜 출력
Sys.Date()     # 오늘 날짜(시분초 출력 X)
Sys.time()     # 오늘 날짜(시분초 출력)


# [ 연습 문제 ]
# 2022/01/01일로부터 100일 뒤 날짜의 요일 출력
'2022/01/01' + 100            # 연산 불가

d1 <- as.Date('2022/01/01') + 100
as.character(d1, '%A')

as.character(as.Date('2022/01/01') + 100, '%A')

# [ 연습 문제 ]
# emp.csv 불러온 후 각 직원의 근무일수 출력
df1 <- read.csv('emp.csv')
class(df1$HIREDATE)

df1$WDAY <- Sys.Date() - as.Date(df1$HIREDATE)   # 컬럼 추가
df1

# [ 참고 - 두자리 연도 해석]
as.Date('70/12/11')               # "0070-12-11" 
as.Date('70/12/11', '%y/%m/%d')   # "1970-12-11"
as.Date('68/12/11', '%y/%m/%d')   # "2068-12-11"

# 20XX : 00~68년 (in oracle : 00~49년)
# 19XX : 69~99년 (in oracle : 50~99년)

# [ 참고 - 함수 사용 방법 ]
# sql과는 다르게 함수의 각 인수는 이름을 가짐
# 인수는 이름과 함께 전달 가능(순서대로 전달시에만 생략 가능)
help(read.csv)

read.csv(file='emp.csv')
read.csv('emp.csv')       # 첫번째 인수에 전달

# f1(a,b,c)
# f1(1,2)          => a=1, b=2로 전달
# f1(b=1, c=2)     => b=1, c=2로 전달

# 날짜 패키지(lubridate)
install.packages('lubridate')
library(lubridate)

year(d1)                   # 연도 추출(숫자 리턴)
as.character(d1, '%Y')     # 연도 추출(문자 리턴)

month(d1)                      # 월
day(d1)                        # 일
hour(Sys.time())               # 시
minute(Sys.time())             # 분
second(Sys.time())             # 초
wday(Sys.Date())               # 요일(숫자리턴, 일요일:1)
wday(Sys.Date(), label = T)    # 요일(문자리턴)

d1 + 100                 # 100일 후
d1 + months(3)           # 3개월 후
d1 + years(3)            # 3년 후
Sys.time() + hours(3)    # 3시간 후