일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- MateusAsato
- 커스텀
- 리스트
- 로스티드메이플
- 텔레
- Decode
- to_date
- SQL
- ansi표준
- 파이썬
- 서브쿼리
- 논리연산자
- Prs
- 조인
- 메이플
- group by
- 펜더
- 존써
- Python
- oracle
- 쏜버커
- 메서드
- 적용함수
- Suhr
- Asato
- 스트라토캐스터
- 로즈우드
- 오라클
- 오더
- case문
- Today
- Total
Big Bro's Studying Archive
R 프로그래밍 입문 (2) 벡터의 생성, 색인, 수정, Boolean 색인, 형확인함수, 논리 연산자 본문
Author : Yoon Baek
참고 : 날짜 포맷 확인
help("strftime")
help 함수 : 해당 함수의 정보를 보여주는 함수
함수의 인자, 인자 타입, 출력 결과등에 대한 설명이 적혀있다.
R을 공부할 때 참조하면 여러모로 좋다.
strftime() #string format time
strptime() #string 파씽 time (파씽 = 해석)
스트링포맷타임 : 날짜 포맷 변경 ( = as.character)
: 날짜의 포맷을 스트링 타입으로 정해준다고 생각하면 편하다.
스트링파씽타임 : 문자를 날짜로 파싱, as.date
strptime('02/10/2020')
#기본값이 없는 인수 "format"가 누락되어 있습니다
strptime('02/10/2020', '%d/%m/%Y')
#[1] "2020-10-02 KST"
strftime(Sys.Date(),'%A')
#[1] "수요일"
year(Sys.Date())
#안됨
패키지를 세션마다 로드해야 하기 때문에
패키지 내부함수는 library()함수로 따로 패키지를 부른 뒤 써야 한다.
R의 자료 구조
- 스칼라
- 벡터 vector (1차원)
- 행렬 matrix
- 배열 array
- 데이터프레임(data.frame)
벡터
- 아주 정확한 1차원 데이터
- 단 하나의 데이터 타입만 허용
- 오라클의 컬럼과 유사한 느낌
1. 벡터의 생성
v1 <- c(1, 2, 3) ; v1
v2 <- c('a', 1) ; v2 #(1이 문자로 변환)
v3 <- 1:10 ; v3
v2의 1을 '1'로 형을 통일해 버리는 것이 R 벡터의 특징이다.
2. 벡터의 확장 (값 추가)
v1 <- c(v1, 4) ; v1 #맨 끝 추가
v1 <- append( x = v1, values = 4, after = 2) ; v1
# 중간 추가.
append를 활용하면 추가 값의 위치를 지정할 수 있다.
3. 벡터의 산술연산
v4 <- c(10,20,30)
v5 <- c(10,20,30,40)
v1 + 1 #벡터와 스칼라 연산 가능
v1 + v4 #서로 크기가 같은 벡터 연산 가능
v1 + v5 #서로 크기가 다른 벡터는 작은 벡터가 반복연산
v5 10 20 30 40
+ v1 1 2 3 1
------------------
11 22 33 41
크기가 다른 벡터의 반복 연산 논리 구조
4. 벡터의 색인(indexing, 추출)
정수색인
[] : 색인을 나타내는 문법
v5[3] #벡터 중 3번째 값
v1[c(1, 3)] # 첫번쨰, 세번째 원소 추출, c로 묶어줘야 한다
v1[-1] # -n : n번째 데이터 제외
# 파이썬 문법과는 다른 부분 python에서는 뒤에서 1번째
v1[1, 3] #: 2차원으로 해석
이름색인
names(v1) # 벡터의 각 원소 이름 출력
names(v1) <- c('a', 'b', 'c')
v1['a']
v1[-'a'] #이름 색인에는 - 사용 불가
v1[c('a', 'b')]
# a b
# 1 2
위에서 주석을 통해 확인할 수 있다시피
이름을 집어넣을 수도 있으며
이름의 벡터색인도 가능한 점이
R에서는 여러모로 편리한 점이다.
참고 : 2차원 데이터에서의 색인
df1 <- read.csv('emp.csv')
smith와 알렌의 입사일, 연봉
df1[c(1,2), c(5,6)]
smith와 allen의 이름과 연봉추출
df1 [c(1,2), c(2,6)]
df1 [c(1,2), c('ENAME','SAL')] ##둘다 표현 가능
#c(행정보1, 행정보2), (열정보1, 열정보 2)
데이터 프레임은 키의 이름이 있는 형식이기 때문에
키의 이름이 있는 컬럼방향으로는
ENAME, SAL과 같은 컬럼명 전달도 가능하다.
조건색인(boolean 색인)
T, F # 논리값
TRUE, FALSE # 풀네임으로도 표기 가능
v1[c(T,F,F)]
v1 < 2 # 조건에 맞는 값이 아니라 논리값이 출력
v1[v1<2] # 조건에 매칭되는 값을 출력
# Oracle의 where 문법과 같은 역할
예제) emp에서 sal이 2000 이상인 직원 이름, sal 추출
df1[df1$SAL >= 2000, c(2, 6)]
조건을 만족하는 행을 선택하는 것이므로
조건을 행 자리에 넣어준다.
슬라이스 색인(연속추출)
v2 <- 1:10
v2[4:8]
v1['b':'c'] #문자 슬라이스 색인 안됨
[연습문제]
1) emp.csv 파일을 읽고 10번 부서원의 이름, job, sal 출력
df1[df1$DEPTNO == 10, c('JOB', 'SAL')]
행방향에 10번 부서라는 제한 정보 전달 후
원하는 컬럼인 job과 sal 출력
2) 20번 부서원의 sal의 총합 입력
sum(df1[df1$DEPTNO <30 & df1$DEPTNO > 10, 'SAL'])
3) 이름이 scott과 king인 사람의 이름, 사번, 연봉, sal 출력
df1[df1$ENAME == 'SCOTT' | df1$ENAME == 'KING', c('ENAME', 'EMPNO', 'HIREDATE', 'SAL')] # sol1
df1[df1$ENAME %in% c('SCOTT', 'KING'), c('ENAME', 'EMPNO', 'HIREDATE', 'SAL')] # sol2
R에서의 or 연산자인 |를 활용하여 or 조건을 주거나
벡터 색인 조건을 줘서 풀 수 있다.
벡터 수정
v1[2] <- 20;
v2[2:5] <- seq(20,50,10) ;
번호를 부여하여 스칼라를 넣거나
시퀀스 수에 맞는 형식의 데이터에 넣어주면
그 자리에 데이터가 순서대로 들어간다.
예제 v1 벡터에 마지막에 4 삽입, 원소이름을 d부여
v1 <- c(1,2,3) ;v1
v1[4] <- 4
names(v1)[4] <- 'd'
names(v1) <- c('a', 'b', 'c')
벡터 크기 확인
length(v1) #4, 1차원인 벡터의 크기 확인
NROW(v1) #행의 개수, 1차원일 경우는 원소의 개수 출력
nrow(v1) #행의 개수, 2차원에서만 정상 작동
NROW는 1,2차원 모두, nrow는 2차원에서도 쓸 수 있다.
다만 1차원에서는 length, 2차원에서는 nrow가 있으므로
의외로 잘 사용하지는 않게 된다.
논리연산자
1) and 연산자
T & T
T & F
F & F
2) or 연산자
T | T
T | F
F | F
3) not 연산자
!(v1>1)
v1 != 1
!(v1 == 1)
예제) c2에서 3이하, 8이상인 값 출력
v2 <- 1:10
v2[v2 >=8 | v2 <= 3]
포함 연산자
(v1 == 1) | (v1 == 2) # 1이나 2를 포함하고 있느냐
v1 %in% c(1,2) # or 연산의 축약형
1 %in% v1
형 확인 함수
is.character('a')
class('a')
v10 <- ''
is.na(1)
is.null(v10)
is.character(v10) # true
v3 <- c(1,NA,3,4)
is.na(v3)
F, T, T, T가 출력된다.
예제) 다음의 v3에서 NA인 원소만 찾아 2로 수정
v3
v3[is.na(v3)] <- 2
색인을 통해서 쉽게 수정할 수도 있다.
'Big Data展' 카테고리의 다른 글
SQL by Oracle #6 outer join과 다양한 서브쿼리 (0) | 2020.04.24 |
---|---|
Python 기초 6 : for 반복문, map함수, 리스트 내포표현식을 이용한 리스트 연산 (0) | 2020.04.21 |
R 프로그래밍 입문 (1) 변수의 선언과 기본적인 형변환함수, 날짜함수 (0) | 2020.04.16 |
SQL by Oracle # 5. group by와 join, union & 실습문제 (0) | 2020.04.14 |
Python 기초 5 : 딕셔너리와 튜플, 그리고 반복문 연습 (0) | 2020.04.10 |