▣주요 키워드▣
- 문자함수
- 숫자함수
- 날짜함수
★ 문자함수
▶nchar
- 문자수를 리턴하는 함수
nchar('R Dveloper')
nchar('R Developer', type='chars')
nchar('R Developer', type='bytes')
nchar('빅데이터', type='chars') # 문자의 수
nchar('빅데이터', type='bytes') # 문자의 byte
x <- c('R', 'Developer')
length(x) # 여기서는 벡터의 길이
nchar(x) # 방마다 문자의 길이를 추출
nchar(x)[1]
nchar((x)[1])
nchar(x)[2] # 모든 방을 다 세어놓고 두번째를 추출
nchar((x)[2]) # 처음부터 두번째 방의 값을 추출
▶ strsplit
- 부분 문자로 분리하는 함수
strsplit('R Developer', split=' ') # 공백문자를 기준으로 분리, 리스트형으로 출력
strsplit('R Developer', split=' ')[[1]][1] # 첫번째 방의 첫번째 값을 출력
strsplit('R Developer', split=' ')[[1]][2] # 첫번째 방의 두번째 값을 출력
strsplit('R,Developer', split=',') # 컴마를 기준으로 분리
strsplit('R Developer', split='') # 한글자 씩 분리
strsplit('R,Developer', split=character(0)) # 한글자 씩 분리2
as.vector(strsplit('R Developer', split=' ')) #벡터로 변하지 않는다
# unlist : list자료형을 vector자료형으로 변환하는 함수
unlist(strsplit('R Developer', split=' '))
x <- strsplit('R Developer', split=' ')
paste(x[[1]]) # 값이 합쳐지지않음
paste(x[[1]][1], x[[1]][2]) # 별도로 분리시키면 합쳐진다.
paste(x[[1]], collapse = ' ') # collapse옵션을 통해 합칠 수 있다.
y <- c('a','b','c')
paste(y[1],y[2],y[3])
paste0(y[1],y[2],y[3])
paste(y, collapse=' ')
paste(y, collapse=',')
strsplit(paste(y, collapse=','),split=',') # 합쳤다가 다시 분리
▶ toupper
- 대문자로 변환하는 함수
toupper('r developer')
▶ tolower
- 소문자로 변환하는 함수
tolower('R DEVELOPER')
▶ substr
-문자를 추출하는 함수
substr('R Developer',1,1) # substr(문자열,뽑아낼위치,처음부터해서 뽑아낼 글자 수)
substr('R Developer',1,5)
substr('R Developer',3,3) # 왜 D 하나만 나올까? R개발자가 그렇게 만들어놓은것, 음수로 뒤어서부터 뽑을 수 없음
substr('R Developer',2,4)
▶ substring
x <- 'developer'
substring(x,nchar(x)-1)
#x변수의 값에 제일 뒤에 두글자만 추출
#substring 슬라이싱 계산
substring(x,1:3,4:5)
(1,4),(2,5),(3,4)
예1)
1 2 3
4 5 4
예2)1:6, 4:5
1 2 3 4 5 6
4 5 4 5 4 5
substring(x,1:nchar(x),3:nchar(x)) # 하나의 단어를 3글자씩 계단처럼 추출 n-gram
▶ sub
- 첫 번째 일치하는 문자만 바꾸는 함수
sub('R','Python','R Programmer R Developer') #처음으로 나오는 R을 Python으로 변경
# sub(찾을문자,바꿀문자,문자열)
▶ gsub
- 일치하는 모든 문자를 바꾸는 함수
gsub('R','Python','R Programmer R Developer') # R을 모두 찾아서 Python으로 변경
▶ toTitleCase()
- 첫 글자를 대문자 나머지 소문자로 변경해주는 함수
library(tools) # tools사용할 때 libray함수사용
tools::toTitleCase(x) # 첫글자 대문자 뒷글자 소문자로 변환하는 함수
#처음 사용할 때 무조건 tools:: 적기, 기본적으로 내장되어있지 않는 특정한 라이브러리를 사용할 때 무조건 tools::라고 표현
toTitleCase(x)
★ 숫자 함수
▶ round
- 숫자를 지정한 자릿수를 기준으로 반올림
45.926
-10 123 <- 위치
round(45.926)
round(45.926,0) # 기본값
round(45.926,1) # 소수첫째자리를 기준으로 둘째자리에서 반올림
round(45.926,2) # 소수둘째자리를 기준으로 셋째자리에서 반올림
round(45.926,-1) # 10의자리를 기준으로 1의자리에서 반올림
round(45.926,-2) # 100의자리를 기준으로 10의자리에서 반올림 0
round(55.926,-2) # 100의자리를 기준으로 10의자리에서 반올림
▶ signif
- 앞에서부터 지정한 위치로 반올림
45.926
12 345 <- 위치
signif(45.926,4) # == round(45.926,2) 앞에서부터 4자리 출력 5번째 자리에서 반올림
signif(45.926,3) # == round(45.926,1) 앞에서부터 3자리 출력 4번째 자리에서 반올림
signif(45.926,2) # == round(45.926,0) 앞에서부터 2자리 출력 3번째 자리에서 반올림
signif(45.926,1) # == round(45.926,-1) 앞에서부터 1자리 출력 2번째 자리에서 반올림
▶ ceiling
- x보다 크거나 같은 정수, 올림
ceiling(45.0)
ceiling(45.01)
ceiling(45.0000000001)
▶ trunc
- 소수점은 절삭하는 함수
trunc(45.926)
trunc(45.926,1) # 자리수를 입력해도 의미가 없다, 무조건 절삭됨
trunc(45.926,2)
▶ floor
- x보다 작은 수 중에서 가장 큰 정수를 나타내는 함수, 내림
floor(45.926)
floor(45.0)
floor(-10.0)
floor(-10.0001)
▶ 제곱근
sqrt(16)
▶ 절대값
abs(-1)
▶ factorial
factorial(3) # 1 * 2 * 3
factorial(5) # 1 * 2 * 3 * 4 * 5
★날짜 함수
▶현재 날짜, 시간
Sys.Date() # 현재 날짜
Sys.time() # 현재 날짜 시간 (한국표준시 :KST)
date() # 요일 월 일 시간 세기
▶ as.Date()
- 문자형 날짜를 날짜형으로 변환하는 함수
class('2022-01-11') # character(문자)형식
class(as.Date('2022-01-11')) # as.Date()날짜형식으로 변경
class(as.Date('2022/01/11'))
class(as.Date('20220111')) # 오류
as.Date('2022-01-11')
as.Date('20220111',format='%Y%m%d')
as.Date('2022.01.11',format='%Y.%m.%d')
#sql
to_date('20220111','yyyymmdd')
class(as.Date('20220111'))
※ format : 날짜 모델 요소
%Y : 년도 4자리(세기 포함)
%y : 년도 2자리(세기 불포함)
%m : 숫자 달
%B : 문자 달
%b : 문자 달 약어
%d : 일
%A : 요일
%a : 요일의 약어
%u : 숫자 요일 1~7, 월요일 1
%w : 숫자 요일 0~6, 일요일 0
%H : 시
%M : 분
%S : 초
%z : timezone 시간
%Z : timezone 이름
as.Date('2022년 1월 11일', format='%Y년 %m월 %d일') # %Y년 %m월 %d일 형식의 날짜를 날짜형으로 변경
as.Date('2022년 1월 11일', format='%Y년 %B %d일') # %Y년 %B %d일
as.Date('2022년 1월 11일', format='%Y년 %m월 %d일')
as.Date('2022년 1월 11일', format='%Y년 %B %d일')
as.Date('2022년 JANUARY 11일', format='%Y년 %B %d일') #na로 나옴
Sys.getlocale()
Sys.setlocale("LC_ALL","English") # 현재 설정을 영어로 바꾸기
Sys.getlocale()
as.Date('2022년 JANUARY 11일', format='%Y년 %B %d일')
as.Date('2022년 1월 11일', format='%Y년 %B %d일') #na
as.Date('2022년 1월 11일', format='%Y년 %m월 %d일')
Sys.getlocale()
Sys.setlocale() # 기본설정값으로 적용
Sys.getlocale()
as.Date('2022년 1월 11일', format='%Y년 %B %d일')
▶ format 함수
- 날짜를 문자형으로 변환하는 함수
Sys.Date()
format(Sys.Date(),'%Y%m%d')
mode(format(Sys.Date(),'%Y%m%d'))
format(Sys.Date(),'%B')
Sys.setlocale("LC_ALL","English") # 현재 설정을 영어로 바꾸기
Sys.getlocale()
format(Sys.Date(),'%B') #문자달
format(Sys.Date(),'%b') #문자달 약어
format(Sys.Date(),'%A') #요일
Sys.setlocale() # 기본설정값으로 적용
Sys.getlocale()
format(Sys.Date(),'%B')
format(Sys.Date(),'%b')
format(Sys.Date(),'%A')
format(Sys.Date(),'%u') # 1~7 월 1
format(Sys.Date(),'%w') # 0~6 일 0
format(Sys.time(),'%H') #시
format(Sys.time(),'%M') #분
format(Sys.time(),'%S') #초
format(Sys.time(),'%z') # 타임존의 시
format(Sys.time(),'%Z') # 표준시
▶ weekdays
- 요일을 출력하는 함수
format(Sys.Date(),'%A')
weekdays(Sys.Date())
▶ 날짜 계산
Sys.Date() + 129 # 현재 날짜에 129일을 뺀 날짜
Sys.Date() - 30 # 현재 날짜에 30일을 뺀 날짜
as.Date('2022-01-11', format='%Y-%m-%d') + 129 # '%Y-%m-%d' 형식의 문자형데이터 2022-01-11값을 date형으로 변경하고 129일을 더한 날짜 출력
as.Date('2022-01-11') + 129 # '2022-01-11'형식은 문자형이지만 날짜형의 기본값과 형태가 동일하므로 format을 안 써도 date형으로 변경할 수 있다.
as.Date('2021-12-16') - Sys.Date() # 날짜와 날짜를 빼면 값이 일 수로 나온다.
as.numeric(Sys.Date() - as.Date('2021-12-16')) # 값을 일 수만 보고 싶을 때 형을 numeric으로 변경하면 된다.
▶ difftime
- 두 날짜 사이에 일 수를 리턴하는 함수
difftime(as.Date('2021-12-16'), Sys.Date())
as.integer(difftime(as.Date('2021-12-16'), Sys.Date()))
as.numeric(difftime(Sys.Date(),as.Date('2021-12-16')))
▶ as.difftime
- 시간으로 형을 변환하는 함수, 시간의 차이를 나타내는 함수
as.difftime('18:30:00') - as.difftime('09:30:00')
#18시 30분 - 9시 30분
▶ lubricate 패키지
install.packages("lubridate") #관리자 권한으로 실행해서 설치
library(lubridate) # 설치확인
lubridate::today() # today() 오늘 날짜, lubridate::표시를 처음에 사용할 때 꼭 해주는 것이 소통에 좋다
today()
lubridate::now() # now() 오늘 날짜 시간 표준시
now()
● 날짜 -> 문자형으로 추출
# 날짜 -> 문자형으로 추출
format(Sys.Date(), '%Y')
class(format(Sys.Date(),'%Y'))
● 날짜 -> 수치형으로 추출 (lubridate::year : 년도를 수치형으로 추출하는 함수)
lubridate::year(Sys.Date())
lubridate::year(Sys.time())
class(lubridate::year(Sys.Date()))
lubridate::year(today())
lubridate::year(now())
● 달 추출
format(Sys.Date(),'%m') # 문자달 추출
lubridate::month(Sys.Date()) # 숫자달 추출
lubridate::month(lubridate::today())
lubridate::month(lubridate::now())
● 일 추출
format(Sys.Date(), '%d') # 문자일 추출
lubridate::day(Sys.Date()) # 숫자일일 추출
lubridate::day(lubridate::today())
lubridate::day(lubridate::now())
● 요일 추출
format(Sys.Date(), '%A') # 문자 요일 추출
format(Sys.Date(), '%a')
format(Sys.Date(), '%u') # 문자형 숫자 요일 1~7 월요일 1
format(Sys.Date(), '%w') # 문자형 숫자 요일 0~6 일요일 0
weekdays(Sys.Date())
lubridate::wday(Sys.Date(),week_start = 1) # 1~7월요일 기준, 숫자로 출력
lubridate::wday(Sys.Date(),week_start = 7) # 1~7일요일 기준, 숫자로 출력
lubridate::wday(Sys.Date(),week_start = 1, label = T) # label=T 문자요일 출력(factor형으로 출력)
lubridate::wday(Sys.Date(),week_start = 1, label = F) # label=F 기본값, 숫자요일
lubridate::wday(Sys.Date(),week_start = 7, label = T) # label=T 문자요일 출력(factor형으로 출력)
lubridate::wday(Sys.Date(),week_start = 7, label = F) # label=F 기본값, 숫자요일
as.vector(lubridate::wday(Sys.Date(),week_start = 7, label = T)) # 백터형으로 변경
● lubridate::years
- 년의 수를 더하거나 뺄 때 사용
Sys.Date() + 3650 # 3650일(10년)을 더할 때
Sys.Date() + lubridate::years(10) # # 현재 날짜에 10년을 더하기
Sys.Date() - lubridate::years(10) # 현재 날짜에 10년을 빼기
Sys.Date() + lubridate::years(-10) # 현재 날짜에 10년을 빼기
lubridate::now() - lubridate::years(10) # 현재 날짜에 10년을 빼기
lubridate::now() + lubridate::years(-10) # 현재 날짜에 10년을 빼기
● months (lubridate x, base에 내장)
- 달의 수를 더하거나 뺄 때 사용
Sys.Date() + base::months(5) #lubridate아님, 현재날짜에 5개월을 더한 날짜
Sys.Date() + base::months(-5) # 현재날짜에 5개월을 뺀 날짜
Sys.Date() + lubridate::years(10) + base::months(2) # 현재 날짜에 10년, 2개월을 더한 날짜
#SQL : select sysdate + to_yminterval('10-02') from dual;
● lubridate::days(), lubridate::hours(), lubridate::minutes(), lubridate::seconds()
- 일(시간, 분, 초) 수를 더하거나 빼는 함수
# lubridate::days() 일수를 더하거나 빼는 함수
Sys.Date() + 100
Sys.Date() + lubridate::days(100)
Sys.Date() + lubridate::days(-100)
# lubridate::hours() 시간을 더하거나 빼는 함수
Sys.time() + lubridate::hours(2)
Sys.time() + lubridate::hours(-100)
#lubridate::minutes() 분을 더하거나 빼는 함수
Sys.time() + lubridate::minutes(30)
Sys.time() + lubridate::minutes(-30)
#lubridate::seconds() 초를 더하거나 빼는 함수
Sys.time() + lubridate::seconds(3600)
Sys.time() + lubridate::seconds(-3600)
Sys.time() + lubridate::days(100) + lubridate::hours(10) + lubridate::minutes(30) + seconds(50)
# 현재 날짜 시간에 100일, 10시간, 30분, 50초 더한 날짜
#SQL : select localtimestamp + to_dsinterval('100 10:30:50') from dual;
Sys.time() + lubridate::hours(2) + lubridate::minutes(30) + lubridate::seconds(50)
Sys.time() + lubridate::hms('02:30:50')
#lubridate::hms로 간단히 표현할 수 있다.( 현재시간에 2시간30분50초 더하기)
x <- lubridate::now() # 현재 날짜 x변수에 초기화
x
lubridate::year(x) <- 2000 #연도만 수정
lubridate::month(x) <- 2 # 달 수정
lubridate::day(x) <- 1 # 일 수정
lubridate::hour(x) <- 12 # 시간수정
lubridate::minute(x) <- 0 # 분수정
lubridate::second(x) <-0 # 초수정
x
Sys.Date() + 100 # 현재 날짜에 100일 더한 날짜
lubridate::now() + 100 # lubridate::now에서는 수행이 안된다. POSICXct형
lubridate::now() + lubridate::days(100) # 현재 날짜에 100일 더한 날짜
x+100
x+ days(100)
● 분기 lubridate::quarter, base::quarters
lubridate::quarter(lubridate::now())
lubridate::quarter(lubridate::now() + days(200)) #현재날짜에 200일 더하기
lubridate::quarter(Sys.Date()+200) #현재날짜에 200일 더하기
# 분기 base::quarters
base::quarters(Sys.Date()) # 분기
base::quarters(Sys.Date() + 200)
'R' 카테고리의 다른 글
R merge (0) | 2022.01.17 |
---|---|
R 함수(function) (0) | 2022.01.16 |
R 조건제어문, 반복문 (0) | 2022.01.13 |
R 중복제거, 정렬, 그룹함수 (0) | 2022.01.12 |
R공부 matrix, array, factor, data frame (0) | 2022.01.11 |