학교공부/탐색적자료분석

1주차_R코드_벡터/행렬/연산과 논리/요인/데이터프레임

싱싱한복초이 2024. 3. 18. 00:02

x <- 6
x
13%%5 # 나머지 구하기
x=seq(1,10)
x
y=x^2
y
plot(x,y)
x <- 2
a="low"

### 1장. r언어

##
## 오브젝트1-함수,벡터,행렬
##

 

# 오브젝트: 데이타세트, 함수, 산출모형 등 독자적인 것. 다수 추상적. ls()로 열거, 확인

# 함수: read.table(), hist(), help() 등 괄호의 입력값을 받아서 특정한 출력 또는 기능을 하는 명령어

# 데이타세트: 벡터, 매트릭스, 어레이, 데이타프레임, 리스트 등

# R을 배운다 = R의 함수, 데이타세트 등 오브젝트에 대해 알아 가는 것

# 객체(오브젝트) 지향적, 함수형 프로그래밍 언어

#수치형, 문자형 변수

x=2  #수치형 변수

a="low" #문자형 변수

## 벡터

# 벡터 만드는 함수: c는 결합, combine 함수
x=c(2,2,4)
a=c("low","high","high") 
ls() # ls()오브젝트 열거 / rm()는 변수 삭제
str(a) # 오브젝트 구조 설명 / chr는 문자
length(x) # 벡터 길이 제공 함수

# 자동으로 벡터 만들기
1:10
seq(1,10,1) # 1에서 10까지 간격은 1로
seq(0.1,1.2,0.11)
rep(1,10) # 1을 10번 반복해라

## 행렬

y <- c(1.2,3.0,4.8)
c(x,y) # x와 y가 결합됨
M=matrix(c(x,y),ncol=2) # matrix는 행렬만들기 함수 / 앞의 벡터 값으로 열의 수가 2개인 행렬을 만들어라
M

# 디폴트는 컬럼을 하나씩 채워가는 bycol=T
M1=matrix(c(x,y),ncol=2, byrow=T)
M1
M2=matrix(c(x,y),nrow=2) # 행의 수가 2개인 행렬을 만들어라
M2
M1;M2 # ;은 명령어 여러개를 한 줄에 칠 수 있도록 만들어줌

c(x,a) # 붙여지긴 하지만 모두 문자형으로 치환이 됨
matrix(c(x,a)) # matrix는 같은 유형의 벡터이어야 한다. 수치형과 문자형이 같이 들어오면 문자형으로 간주

# 결합으로 행렬만들기
M2=cbind(x,y);M2
M3=rbind(x,y);M3
nrow(M2)
ncol(M2)

ls() # matrix도 오브젝트이다.

##
## 연산1
##

## 연산과 논리(14)

x=c(2,2,3)
x^3+1
y=c(1.2,3.0,4.8)
x*y # element wise 연산
x/y
round(x/y,2) # 두번째 자리까지만 표기해라

## 행렬연산

M= cbind(x,y);M
t(M) # transpose 전치
M1=t(M)%*%M ; M1 # %*%는 행렬곱 연산 
b=c(1,2)
M1*b # element wise 계산 첫번째 행에 1을 곱하고 두번째 행에 2를 곱함
M1%*%b # 행렬곱
x=seq(0,9.9,0.1);x # 수열함수
x=x+0.25;x
M2=matrix(round(x,2),ncol=10,byrow=T) # 행렬만들기 matrix
M2
solve(M1) # 역행렬
solve(M1)%*%M1 # 단위행렬이 나오는지를 확인
E=eigen(M1,symmetric = T);E # 대칭행렬에 대한 고유값과 고유벡터/ 리스트 
E$vectors%*%diag(E$values)%*%t(E$vectors) # diag 대각행렬 함수 # 원래행렬로 복귀

## 논리연산(17)

g=c(T,F,T,T);g # logical, 논리형 변수
f=c(1.2,2.0,3.1,4.9)
d=f>3.14;d
e=as.numeric(d) ; e # 숫자형으로 전환 false는 0으로 true는 1로
str(d);str(e)
c1=c(T,T,F,F); c2=c(T,F,T,F)
c1|c2
c1&c2

#자료의 subset 만들기. 파이썬에서 슬라이싱
f[f>3.4]
f[f==3.4] 
f[f<3.4]
f[c(T,F,F,F)] # TRUE값만 뽑아줘 

## 결측값(18)

x=c(2,2,3,NA)
mean(x)
mean(x,na.rm=T)
(2+2+3)/3
0/0
1/0
10^seq(100,1000,100) # 300승까지는 취급. 그 이상은 무한대로 처리

## 요인(18)

species=c(1,3,2,3)
species.f=factor(species)
levels(species.f)=c("setosa","versicola","virginica") # level 교체
species.f
table(species.f) # 요인 수준별 빈도
species.o=ordered(species,level=1:3) # 순서를 가지는 범주형 요인 정의
species.o
table(species.o)

##
## 오브젝트2-데이터프레임, 리스트(7~14페이지)
##

## 데이터프레임: 다른 유형의 변수도 포함

x=seq(1,9.9,1); x
a=LETTERS[1:9]; a
d1=data.frame(xx=x, aa=a);d1
str(d1)
L3 <- LETTERS[1:3]
char <- sample(L3,10,replace=T); char
d <- data.frame(x=1,y=1:10,char=char) ; d
str(d)

# read.table로 만든다: text 자료 읽기