반응형
Notice
Recent Posts
Recent Comments
Link
Today
Total
07-05 05:44
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
관리 메뉴

iOS 개발 기록 블로그

R의 함수 1편 (문자, 날짜, 숫자 함수) 본문

R

R의 함수 1편 (문자, 날짜, 숫자 함수)

crazydeer 2021. 11. 10. 01:02
반응형

 

1. 문자 함수

        SQL    VS         R
upper
toupper
lower
tolower
substr
substr
replace
gsub
concat
paste

 

2. 숫자 함수

        SQL    VS         R
round
round
trunc
trunc
mod
%%
power
^ (: 2^3)

 

3. 날짜 함수

        SQL    VS         R
sysdate
sys.date()
add_months
difftime
months_between
사용자 정의 함수
last_day
사용자 정의 함수
next_day
사용자 정의 함수

 

4. 일반 함수

        SQL    VS         R
nvl
in.na
decode
ifelse
case
ifelse

 

5. 변환 함수

        SQL    VS         R
to_char
as.character
to_number
as.integer
to_date
as.Date


as.factor


format 함수

 

6. 그룹 함수

        SQL    VS         R
max
max
min
min
sum
sum
avg
mean
count
length(세로)
table(
가로)

 

 

 

 

 

 

Upper , Lower 함수

 

예제 1) 이름과 직업을 출력하는데 소문자로 출력하시오

 

)

library("data.table")
data.table(이름=tolower(emp$ename), 직업=tolower(emp$job))

 

결과)

 

 

 

예제 2) 이름이 scott 사원의 이름과 월급을 조회하는데 scott 소문자로 조회해도 조회되도록 하시오

 

)

emp[tolower(emp$ename) == "scott", c("ename", "sal")]

 

결과)

 

 

substr 함수

 

예제 3) 이름의 두번째 철자가 M 사원들의 이름과 월급을 출력하는데 substr 함수를 이용해서 출력하시오

 

)

emp[substr(emp$ename,2,2)=='M', c("ename", "sal")]

 

결과)

Substr(emp$ename, 1, 2) : emp$ename이 첫번째 자리부터 두번째 자리까지 철자

 

 

 

 

 

예제 4) 이름을 출력하고 옆에 이름의 첫번째 철자부터 세번째 철자까지 출력하시오

 

)

data.table(이름=emp$ename, "이름 세글자"=substr(emp$ename,1,3))

 

결과)

 

 

paste 함수

" 오라클의 연결 연산자와 비슷한 기능을 하는 함수 "

 

 

예제 5) paste 함수를 이용해서 이름과 직업을 아래와 같이 출력하시오

 

결과)

)

paste(emp$ename, '의 직업은', emp$job)

 

2)

data.table(paste(emp$ename, '의 직업은', emp$job))

 

 

 

예제 6) 이름과 연봉을 아래와 같이 출력하시오

 

결과)

)

x <- emp[emp$emnae == "SCOTT", c("ename", "sal")]
x
data.table(paste(x$ename, '의 연봉은', x$sal*12, '입니다.'))

 

설명)

data.table(연봉=emp$sal*12)
emp[, c("ename", "sal*12")]

 

 

c(    )   안에는 테이블에서 컬럼 자체를 가져오는 것이기 때문에 가공할 수 없습니다. 위의 코드 실행해볼 것

 

 

 

날짜 함수

예제 7) 오늘 날짜를 출력하시오

 

)

 

 

예제 8) 이름, 입사한 날짜부터 오늘까지 몇일 근무했는지 출력하시오

 

)

data.table(emp$ename, Sys.Date()-emp$hiredate)

 

위의 답이 실행되지 않습니다. 왜냐하면

 

str(emp)
str(Sys.Date())

 

해보면 hiredate 값이 factor이고 sys.date date입니다.

 

따라서 날짜로 변환해줘야 합니다.

 

data.table(emp$ename, Sys.Date()-as.Date(emp$hiredate))

 

오라클의 to_date 비슷하다고 보면 됩니다.

 

결과)

 

 

예제 9) next_day 함수를 생성하시오. 보기와 같이 나오도록 해야함

 

SQL)

select next_day(sysdate, 'friday')
from dual;

 

보기)

next_day(Sys.Date(), '금요일')
18/05/11

 

)

function(x,day){
  for(i in 1:7){
    check_date = x + i
    if (format(check_date,'%A') == day){
      print(check_date)
    }
  }
}

 

next_day(Sys.Date(),'금요일')

 

 

 

 

숫자 함수

제곱은 ^ 로 표기합니다.

예) 6의 9승은 6^9

 

나머지는 %% 연산자를 씁니다.

예) 10%%3 (결과: 1)

 

 

Round 함수

이상한 특징이 있습니다. R은 짝수를 좋아합니다.

 

122 -------------------------------- 123

              Round(122.5)

 

 

123 -------------------------------- 124

              Round(123.5)

 

 

결과)

 

 

Trunc 함수

숫자 3678.78 이고 2번째 행은 인덱스입니다.

3 6 7 8 . 7 8
-4 -3 -2 -1 0 1 2

 

round(3678.78, 1)

round(3678.78, -1)

trunc(3678.78, 1)

trunc(3678.78, -1)

 

Trunc 소수점 이하만 가능하다

 

반응형