Big Bro's Studying Archive
R 프로그래밍 입문 (1) 변수의 선언과 기본적인 형변환함수, 날짜함수 본문
R 환경설정
작업디렉토리 확인 및 변경
getwd() #라인단위 실행 ctrl + Enter (work directory)
setwd('C:/Users/백승윤/Desktop/수업')
#이렇게 설정해줘도 이번세션에서만 변경됨
#Tools Global Options에서 Defualt 디렉토리를 변경해 주면 된다.
참고
: 여러라인 주석 처리
-> Ctrl + Shift + C
변수
선언 (길어지는 변수식을 편리하게 재사용하기 위해)
R에서는 화살표를 이용해 변수를 선언한다.
처음에는 불편해보이지만 익숙해지면 쓸만하다.
v1 <- 1
변수명에도 규칙이 있다. 숫자부터 올 수 없다. 특문은 _와 .만 가능
'.'부터 시작할 경우 뒤에 숫자가 올 수 없다.
변수명 a1, b1, c1 같은 변수명 좋지는 않음.
a1 <- 1
b1 <- 2
c1 <- 3
각 위치에 스칼라 선언
sum <- a1 + b1
좋지 않은 변수명.
이미 있는 함수이기 때문에 에러나기 쉽고 찾기 어렵다.
v_sum <-a1 + b1 + c1
c2 <- 'a'
c3 <- "a b" ; c3
변수를 연산한 변수 생성 가능.
변수에 텍스트 선언 가능
변수의 데이터 타입 확인
class함수를 통해서 확인할 수 있다.
python의 type과 같은 역할
class(v1)
class(c2)
d1 <- Sys.Date() #현재 날짜 (대소구분 하는듯)
class(d1)
d1
Sys.Date()는 현재 날짜를 불러오는 기능의 함수이다.
대소문자에 주의하도록 하자
산술연산
c1 <- '10'
a1 + b1 # numeric type 끼리 연산 가능
c1 + a1 # 문자변수와 숫자변수 연산 불가
# 묵시적 형변환(db 만의 특징) 발생 X
d1 + 100 #날짜와 숫자상수 연산가능
형 변환 함수
as.numeric()
as.character()
as.Date()
위에서 부터 숫자, 문자, 날짜로 형변환을 해주는 함수.
as.numeric(c1) + a1
c1은 '10'이라는 텍스트 변수인데
numeric을 통해 숫자로 변경해주면 연산 가능하다.
날짜의 형변환 및 파싱
d2 <- as.Date('2020/02/05') + 100
2월 5일에서 100일 지난 날짜인
2020-05-15가 변수에 저장
as.character(d2, '%A') #요일
as.character(d2, '%Y/%m/%d') #네자리수 년도, 월, 일
as.character(d2, '%H/%M/%S') #시,분,초
변수에 연속적 값할당
seq1 <- 1:10
1부터 10까지의 연속된 정수 출력
'a' : 'f' #문자 연속적 출력 불가
문자는 되지 않는다.
함수의 사용 방법
substr('abcde', 2, 3)
substr('abcde', start=2, stop=3)
오라클과는 다르게 인자 이름을 전달할 수 있고
인자 이름을 지정할 경우 순서를 바꿀 수도 있다.
인자 이름 지정은 사용자 지정함수에서 설정 가능하다.
help(seq)
seq(from = 1,
to = 1,
by = ((to - from)/ (length.out -1)))
seq(from = 1, to = 10, by = 2)
시퀀스함수를 통해 by값을 지정하여 사용도 가능하다.
연습문제
1. 2020년 1월 1일부터 1월 31일까지 날짜를 동시 출력
d3 <-as.Date('2020/01/01')
d4 <- as.Date('2020/01/31')
d5 <- seq(from = d3, to = d4, by = 1)
as.character(d5)
d6 <- as.Date('2020/12/31')
seq(from = d3, to = d6, by = 'month')
아래는 월별로 출력. seq함수의 by값에는 날짜 단위 입력도 가능하다.
2. 2020년 6월 8일부터 오늘날짜까지 남은 일수 출력
as.Date('2020/06/08') - Sys.Date()
날짜는 일 단위로 연산이 이뤄진다.
특정 변수 삭제 방법
objects() #선언된 변수 목록 확인
ls() #선언된 변수 목록 확인
rm(list = "sum") #sum이라는 변수 삭제(remove)
rm(list = ls()) #선언된 모든 변수 삭제
산술 연산 기호
7 %/% 3 # 몫
7 %% 3 # 나머지
3^2 # 승수
3**3 # 승수
1e1 # 10
1e2 # 10의 2승
1e3 # 10의 3승
1e-2 # 10의 -2승
342e2 # 342 * 10의 2승
몫과 나머지에만 유의하면 나머지는 크게 어렵지 않다.
NA와 NULL
cat(1, NA, 2) # 자리수 고정
cat(1, null, 2) # 없는 데이터이므로 자리수 고정 불가
sum(1, NA, 3) # NA는 무시할 수 없음
sum(1, NULL, 3) # NULL은 무시 됨
NA + 1 # NA
NULL + 1 # numeric(0)
lubridate 패키지를 활용한 날짜함수 활용
R에서는 패키지를 불러와 해당 패키지 내부의 원하는 함수를 적용시킬 수 있다.
이용 목적에 따라 훨씬 편리한 이용도 가능하다.
install.packages("lubridate")
library(lubridate)
패키지 설치, 불러오기.
date1 <- now()
패키지를 불러오기 전에는 해당 함수가 없다고 나온다.
as.character(date1, '%Y') # 2020
year(date1) #년
month(date1) #월, 숫자형식
month(date1, label = T) #월, 문자형식
#날짜 언어가 영문일떄
day(date1) #일
wday(date1) #요일 숫자 출력
wday(date1, label = T) #요일 이름 출력
hour(date1) #시
minute(date1) #분
second(date1) #초
date1 + months(6) #6개월 후
date1 + years(6) #6년 후
date1 + days(6) #6일 뒤
date1 + hours(6) #6시간 뒤
날짜 언어 변경
Sys.setlocale('LC_TIME', 'C') # 영문형식으로 변경
#세션 마다 적용됨
month(date1, label = T) #날짜 언어가 영문일떄
Sys.setlocale('LC_TIME', 'KOREAN') # 한글
실습 문제
#1. 2020년 2월의 일별 데이터를 출력
그 중 v_year라는 컬럼(변수)에 년도만,
v_month라는 컬럼(변수)에 월만,
v_day라는 컬럼(변수)에 일만 분리저장
v_bonus_date 컬럼에 6개월 후 데이터를 입력
sday <- as.Date('2020/02/01')
fday <- as.Date('2020/02/29')
feb2020 <- seq(from = sday, to = fday, by = 'day')
class(feb2020)
v_year <- year(feb2020); v_year
v_month <- month(feb2020)
v_day <- day(feb2020)
v_bonus_date <- feb2020 + months(6)
v_year
v_month
v_day
v_bonus_date
class(v_year)
as.character(feb2020, '%Y')
as.character(feb2020, '%m')
as.character(feb2020, '%d')
#2. 2019년 전체 날짜를 갖는 v1 변수 생성
v1 <-seq(as.Date('2019/01/01'), as.Date('2019/12/31'), by = 'day')
#3. 위의 벡터를 년도를 제외한 월/일 형식으로만 출력하여 v2 생성
v2 <- as.character(v1, '%m/%d')
#4. '2019/04/25'일로부터 100일 뒤의 날짜와 요일 출력
dd <- as.Date('2019/04/25') + 100
wday(dd, label = T)
#5. 사원의 입사일이 다음과 같을 때 현재까지 근무일수가 몇 주, 몇 일인가 출력
v_hiredate <- c('2018/04/06', '2019/12/23', '2019/05/04')
curd <- Sys.Date(); curd
workdays <- curd - as.Date(v_hiredate)
workw <- as.numeric(workdays) %/% 7
workd <- workdays - workw *7 ; workw; workd
workw는 근속 주수, workd는 근속일수를 의미.
'Big Data展' 카테고리의 다른 글
Python 기초 6 : for 반복문, map함수, 리스트 내포표현식을 이용한 리스트 연산 (0) | 2020.04.21 |
---|---|
R 프로그래밍 입문 (2) 벡터의 생성, 색인, 수정, Boolean 색인, 형확인함수, 논리 연산자 (0) | 2020.04.17 |
SQL by Oracle # 5. group by와 join, union & 실습문제 (0) | 2020.04.14 |
Python 기초 5 : 딕셔너리와 튜플, 그리고 반복문 연습 (0) | 2020.04.10 |
Python 기초 4 : 리스트의 벡터활용 메서드와 함수, for, while, if 문을 활용한 다양한 문제풀이 (0) | 2020.04.09 |