R

R 문자함수, 숫자함수, 날짜함수

Positive_Monster 2022. 1. 11. 18:20
더보기

▣주요 키워드

  1. 문자함수
  2. 숫자함수
  3. 날짜함수

★ 문자함수

 

▶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