상세 컨텐츠

본문 제목

R Scripts : 1. 변수 (Variables)

빅데이터/R with Database Fundamentals

by datasa 2023. 10. 4. 13:52

본문

[img] intellipaat.com

 

# I. 변수 ----

## 1. 변수값 할당 ----
a <- 2
aa <- 5^10
AA <- 10

a+aa
a*AA

aa <- bb <- cc <- 10000
aa;bb;cc

## 2. 여러개의 값을 변수에 할당 <c(), seq()> ----

ls()     # 메모리에 선언되어 있는 변수 리스트
ls.str() # 변수 리스트 + str()
rm(cc)   # 메모리에서 변수 삭제
rm(list=ls())   # 메모리에서 모든 변수 삭제

# c()
?c()
bb <- c(10,20,30,40,50)
cc <- c(10:100)
bb;cc

# seq()
#+ seq(from, to, by=+-, length.out)
?seq()

dd <- seq(10, 50, by=10);dd
ee <- seq(10, 50, by=1);ee

ff <- seq(10, 100, by=10);ff;length(ff)
gg <- seq(100, by=-5);gg;length(gg)

ff
gg
ff+gg

# Q. Why Warning message?
# 작은 dts 길이 * n = 큰 dts 길이
d1 <- c(1:10);d1
d2 <- c(1:3);d2

d1+d2

## 3. 문자변수 할당 ----

h1 <- "aaa";h1;length(h1)
h2 <- 'aaa';h2

h3 <- "hello R~!";h3;length(h3)
h4 <- c("hello", "R", "~!");h4;length(h4)

# 문자 붙이기(err) 
h1+h2
h2+h4

# paste(): 문자 붙이기 함수
paste(h1,h2)
paste(h1,h2) |> length()
paste(h2,h4)
paste(h2,h4) |> length()

## 4. 반복문자값 변수생성 <rep()> ----
?rep()

rep(1:5)
rep(1:5, each=3)
rep(1:5, each=3, length.out=20)

rep(1:5)
rep(1:5, each=2)
rep(1:5, each=2, times=3)
rep(1:5, each=2, times=3, length.out=100)
length(rep(1:5, each=2, times=3, length.out=100))
rep(1:5, each=2, times=3, length.out=100) |> length()

## 5. 집합연산자를 활용한 변수 선언 ----
#+ 중복된 데이터는 제거후 return

set1<- seq(10, 100, by=2);set1;length(set1)  # 46개
set2<- seq(30, 150, by=4);set2;length(set2)  # 31개

# 합집합, union()
u_set <- union(set1,set2)
length(u_set)  # 59개

# 교집합, intersect()
in_set <- intersect(set1,set2);in_set
length(in_set)  # 18개

# 차집합-1, set1-set2
d_set1 <- setdiff(set1,set2);d_set1
length(d_set1)    # 28개 (only set1)

# 차집합-2, set2-set1
d_set2 <- setdiff(set2,set1);d_set2
length(d_set2)    # 13개 (only set2)

# = (value만 비교)
setequal(set1, set2)
setequal(c(1,2,3), c(3,3,3,2,2,3,1,1,3,2))

# is.element()는 %in% 와 유사하다 
set1
is.element(9, set1)
is.element(1, c(1,2,3))

9 %in% set1
1 %in% c(1,2,3)

"ggplot2" %in% installed.packages()
"dplyr" %in% installed.packages()
"yujin" %in% installed.packages()

## 6. 데이터 정렬을 통한 변수생성 ----

# 0-1) dts 생성한 후, 변수 할당

set.seed(12)
a <- sample(1:100, 15);a;length(a)

# 0-2) NA(결측치) 추가
#+ a[index]    # a가 dts이라는 의미
#+             # a에서 index 순번째 data를 조회
#+ a[행, 열]   # a[where, select]
#+ a()         # a는 함수다는 의미

search()
class(a);a;a[2:5]
my_mpg <- ggplot2::mpg
class(my_mpg)
names(my_mpg)
dim(my_mpg)
my_mpg[234,1]
my_mpg[234,4]
View(my_mpg)


# 4, 7, 12번째 NA처리
a[c(4,7,12)] <- NA
a

# 1) rank()  # NA 포함
#+ return : 데이터의 순위

?rank()
a
rank(a)    # 1등이 가장 작음
rank(-a)   # 1등이 가장 큼

# NA 표기
a
rank(a)
rank(a, na.last = T) # default 옵션 (NA는 맨뒤로)
rank(a, na.last = F) # NA는 맨앞으로
rank(a, na.last = "keep") # NA는 순위 없앰
rank(a, na.last = NA) # NA는 안보이게

# 2) sort() # NA 미포함
#+ return : 정렬된 data

a
sort(a)                  # 오름차순
sort(a, decreasing = T)  # 내림차순

# NA표기
sort(a,na.last = T)
sort(a,na.last = F)
sort(a, decreasing = T, na.last = T)  # 내림차순
sort(a, decreasing = T, na.last = F)  # 내림차순

length(a)
length(sort(a))
sort(a) |> length()

# 3) order # NA포함
#+ return : 정렬된 데이터 기준 원자료의 인덱스

a;rank(a);sort(a);order(a)

# 역정렬 관련
a;sort(a, decreasing = T);order(-a)

# NA
a;sort(a);order(a,na.last = T) # NA 맨뒤로
a;sort(a);order(a,na.last = F) # NA 맨앞으로
a;sort(a);order(a,na.last = NA) # NA 안보임

# Q. r2[order(r2)]  == sort(r2)

r2 <- rep(1:5, each=2, times=3);r2
r2[order(r2)]
sort(r2)


r2;order(r2)
paste(order(r2))
paste(order(r2),  collapse = ",")

r2[c(1,2,11,12,21,22,3,4,13,14,23,24,5,6,15,16,25,26,7,8,17,18,27,28,9,10,19,20,29,30)]  # == sort(r2)
r2[order(r2)]

## 7. named vector ----

data(package="datasets")
?islands
head(islands, 10)
tail(islands, 15)

class(islands)
View(islands)
View(a)

# 히스토그램
hist(islands)  # (인수), 인수는 숫자
ggplot2::qplot(islands)

# named vector-1

d2 <- c(a=1,a=1,a=1,b=2,b=2,c=3);d2
View(d2)

# named vector-2

d3 <- c(1,1,1,2,2,3);d3

names(d3) <- c("진우","유진", "희진", "민서", "세현", "재은")

d3;View(d3)

## 8. 범주형 데이터(factor) ----

print("==== 수치형 data ====")
aa <- c(1,1,1,2,2,3,4,5,6,5)
aa

class(aa)
levels(aa)   # levels()의 상대는 범주형 data
nlevels(aa)
is.factor(aa)

rank(aa) |> class()
sort(aa)
order(aa)

print("==== 범주형 data ====")
# is.****() : 확인하는 함수
# as.****() : data type 변환하는 함수

faa <- as.factor(aa)
faa
length(faa)
class(faa)
nlevels(faa)        # 카테고리 수를 리턴
is.factor(faa)

levels(faa)         #  카테고기를 리턴
levels(faa)[2]

sort(levels(faa), decreasing = T)

# 문자 범주형 data
#+ 심다가

sim <- c("심","다","가")
class(sim)
is.factor(sim)

# factor 변환 및 확인 # as.***, is.***
is.factor(as.factor(sim))
class(as.factor(sim))
mode(as.factor(sim))
typeof(as.factor(sim))

## 9. Data Object Type ----

# 1-1) vector-명목형 factor 
f.nom <- factor(c("a","b","a","c","e","e","f"))
class(f.nom);mode(f.nom);typeof(f.nom);str(f.nom)

is.factor(f.nom)   # T
is.ordered(f.nom)  # F: 순서형 factor 확인

# 1-2) vector-순서형 factor
f.ord <- ordered(c(3,2,1,1,1,4,6,3,2))
class(f.ord);mode(f.ord);typeof(f.ord);str(f.ord)

is.factor(f.ord)   # T
is.ordered(f.ord)  # T

# 2) 행렬(matrix)

v2 <- c(1:20);v2
v2 |> length()
View(v2)

# matrix(dts, nrow, ncol, byrow=F)
m1 <- matrix(v2, 4, 5);m1
m2 <- matrix(v2, 4, 5, byrow=T);m2

matrix(v2, 4, 5)
matrix(v2, 4, 10)

# 3) 배열(array)

v4 <- rep(1:100, length.out=20)
rep(1:100, length.out=20) |> length()

# c(1:100, length.out=20)
# c(1:100, length.out=20) |> length()

# 2차원
v4
?array
array(v4, dim=c(10,4))
array(v4, dim=c(10,4)) |> class()
array(v4, dim=c(10,4)) |> typeof()
array(v4, dim=c(10,4)) |> View()

# 3차원
v4
# array(v4, dim=c(10,4,2,2))
ar <- array(v4, dim=c(10,4,2))
array(v4, dim=c(10,4,2)) |> class()
array(v4, dim=c(10,4,2)) |> typeof()

# 조회
#+ dts[행, 열, 층]
ar
ar[,3,]   #  3열만
ar[4,,]   #  4행만
ar[4,4,]  #  4행 4열
ar[4,4,2] #  4행 4열 2층

# 4) 데이터프레임(data.frame)
#+ RDB의 table, 엑셀의 sheet

c1 <- sample(50:100, 15);c1
c2 <- sample(50:100, 15, replace = T);c2

df <- data.frame(c1,c2)
dim(df)

# 5) 리스트(list)

sem <- seq(10, 100, by=5)
sem |> length()

class(sem)
sem_list <- list(sem)
class(sem_list)

View(sem)
View(sem_list)

# list 추가

list_all <- list(sem_list, ar, df, m1, m2, c1, c2);list_all
View(list_all)

# 고민??

class(list_all)
list_all[1]
list_all[[1]]

#
sample(1:5,1)

# ■ 조별 과제 제출 가이드 (jwc@softsociety.net)
# 주제: 데이터분석 설계표 구성
# 업무분장: 조원별 수행 업무

# 1) 데이터 분석 프로젝트 주제
# 2) 데이터 분석 가정(가설에 대한 한계점 지원)
# 3) 가설설정
# 4) 분석대상 변수 구성
#+   각 변수별 설명
# 5) 분석결과로 도출하고 싶은 내용 ***
# 6) 수집데이터 출처
# 7) 분석에 활용될 기법(상세히, 활용하고 싶은 내용)
# +  전처리 방법 리스트
# +  시각화 방법 리스트
# +  머신러닝 / 딥러닝 학습방법 리스트
# 8) 분석결과 추정(가상)

'빅데이터 > R with Database Fundamentals' 카테고리의 다른 글

R Scripts : 2. 함수 (Function)  (0) 2023.10.06
RF7_Test dataset sample  (0) 2023.09.15
RF6_데이터분석및가공  (0) 2023.08.10

관련글 더보기

댓글 영역