์๋ฃ ๊ตฌ์กฐ ์ ํ 5๊ฐ์ง
1. Vector : ๋์ผํ ์๋ฃํ์ ๊ฐ๋ 1์ฐจ์ ๋ฐฐ์ด๊ตฌ์กฐ
์์ฑ ํจ์ : c(), seq(), rep()
1) c(n, n2, ...) ํจ์
var1 <- c(23, -12, 10:20) #๋ฒกํฐ์ ์์ ๋ง๋ค๊ธฐ #:์ ์ด์ฉํด ์ฐ์๋ ์ ์ ์์ฑ
var1
length(var1) #13 (์์์ ๊ฐ์)
mode(var1) #numeric
sum(var1) #13๊ฐ ์์์ ํฉ์ 176
๋ฒกํฐ ์์ ์ด๋ฆ ์ง์
ages <- c(30, 35, 25)
names(ages) <- c('ํ๊ธธ๋', '์ด์์ ', '์ ๊ด์')
ages #๋ฒกํฐ๊ฐ์ 30, 35, 25. ํ๊ธธ๋, ์ด์์ , ์ ๊ด์์ ์๋ฃ๊ฐ ์๋๊ณ ์ฐธ๊ณ ์ฉ
mean(ages) #ages์ ํฉ๊ณ ํ๊ท
2) sequence (from, to, by)
seq(from=1, to=100, by=2) #1๋ถํฐ 100๊น์ง, 2์ฉ ์ฆ๊ฐ
seq(from=100, to=1, by=-2) #100๋ถํฐ 1๊น์ง, 2์ฉ ๊ฐ์
3) rep()
rep(1:3, 3) #1,2,3์ 3๋ฒ ๋ฐ๋ณต
rep(1:3, each=3) #1,1,1 2,2,2 ๊ฐ๋ณ์ ์ผ๋ก 3๋ฒ ๋ฐ๋ณต
4) Index (์์ธ) : ๊ฐ์ด ์ ์ฅ๋ ์์น
* ๋ณ์[n]
a = 1:50
a
a[10] # 10๋ฒ์งธ ์ ์ฅ๋ ๊ฐ์ ๊ฐ์ ธ์ด
a[11:20] #11๋ฒ์งธ๋ถํฐ 20๋ฒ์งธ๊น์ง์ ๊ฐ์ ๊ฐ์ ธ์ด
a[c(5, 10, 15, 40:45)] #cํจ์๋ก ๋ฌถ์ด์ฃผ์ด์ผ ํจ. a[5, 10, 15, 40:45]์ error
a[-c(5, 20)] #์ฌ๋ฌ ์์ ์ค์์ ํน์ ๊ฐ๋ง ์ ์ธ
์กฐ๊ฑด์ ์ด์ฉ
a[a >= 20] #>=:๊ด๊ณ์ฐ์ฐ์. 20์ด์ ๊ฐ๋ง ์ถ์ถ
a[a>=20 & a<=35] #&(=AND):๋
ผ๋ฆฌ์ฐ์ฐ์. 20์ด์ 35์ดํ ๊ฐ๋ง ์ถ์ถ
a[a>=20 | a<=35] #|(=OR):๋
ผ๋ฆฌ์ฐ์ฐ์. 20์ด์์ด๊ฑฐ๋ 35์ดํ๋ฅผ ๋ง์กฑํ๋ ๊ฐ๋ง ์ถ์ถ
a[!(a>=20)] #!(NOT):๋
ผ๋ฆฌ์ฐ์ฐ์. 20์ดํ๊ฐ ์๋ ๊ฐ๋ง ์ถ์ถ
ํจ์ ์ด์ฉ
length(a) #50
a[10:length(a)]
a์ ์ง์ ์์
a[seq(2, length(a), 2)]
2. Matrix ์๋ฃ๊ตฌ์กฐ
๋์ผ ์๋ฃํ์ ๊ฐ๋ 2์ฐจ์ ๋ฐฐ์ด
์์ฑํจ์ : matrix, rbind, cbind
์ฒ๋ฆฌํจ์ : apply
1) matrix() : ๋ฐ์ดํฐ ์์ฑ
m1 = matrix(data=1:5, ncol=2)
m1
dim(m1) #sahpe : 1 5
m2 <- matrix(data = 1:9, nrow = 3, ncol = 3, byrow = TRUE)
m2
2) rbind : ํ ๋ฌถ์
v1 = 1:5
v2 = 6:10
v1; v2
m3 = rbind(v1, v2)
3) cbind : ์นผ๋ผ ๋ฌถ์
m4 = cbind(v1, v2)
m4
dim(m4) # 5 2 : 5ํ 2์ด์ ๊ตฌ์กฐ
4) matrix ์์ธ
* ๋ณ์[row, col]
m4[1, ] #1ํ ์ ์ฒด
m4[ ,2] #2์ด ์ ์ฒด
m4[2:4, ] #boxํ์ผ๋ก ๊ฐ ์ถ๋ ฅ
m4[-3, ] #3ํ๋ง ์ ์ธ
<ADsP ์์ >
xy = rbind(v1, v2)
xy
1) [1, ]๋ v1๊ณผ ๊ฐ๋ค (O)
2) [ ,1]๋ v2์ ๊ฐ๋ค (X)
3) 2X5์ ํ๋ ฌ๊ตฌ์กฐ์ด๋ค (O)
4) ์๋ฃ์ ๊ตฌ์กฐ๋ matrix๋ค (O)
5) apply(data, ํ/์ด, ์ ์ฉ์ํฌ ์ธ๋ถํจ์) : ํจ์ ์ ์ฉ
apply(m4, 1, mean)
apply(m4, 2, mean)
apply(m4, 2, sd) #์ด ๋จ์ ํ์คํธ์ฐจ
3. Array ์๋ฃ๊ตฌ์กฐ (์ฌ์ฉ๋น๋ ๋ฎ์)
๋์ผ ์๋ฃํ์ ๊ฐ๋ 3์ฐจ์ ๋ฐฐ์ด๊ตฌ์กฐ
์์ฑํจ์ : array (data, dim)
data = 1:12
data
arr = array(data = data, dim = c(3,2,2)) # c(ํ,์ด,๋ฉด)
arr
Array ์์ธ
arr[,,1]
arr[,,2]
arr[2:3,,2]
4. DataFrame ์๋ฃ๊ตฌ์กฐ
2์ฐจ์ ๋ฐฐ์ด๊ตฌ์กฐ, ์นผ๋ผ ๋จ์๋ก ์์ดํ ์๋ฃํ์ ๊ฐ๋๋ค (table์ ๋์ผ)
์์ฑํจ์ : data.frame()
์ฒ๋ฆฌํจ์ : apply()
1) vector ์์ฑ(=์นผ๋ผ)
empno = 1:3
ename = c('ํ๊ธธ๋', 'lee', 'yoo')
age = c('35, 25, 45')
pay = c(250, 350, 250)
2) DataFrame
emp = data.frame(NO=empno, NAME=ename, AGE=age, PAY=pay)
์นผ๋ผ๋ค์ด ๋ชจ์ฌ ํ๋์ ๋ฐ์ดํฐ ํ๋ ์ ํ์ฑ
๋ณ์์ ์ด๋ฆ ์ง์ ๊ฐ๋ฅ
emp
str(emp) #emp์๋ฃ์ ๋ํ ๊ตฌ์กฐ ์์ธํ๊ฒ ์ดํด๋ณด๊ธฐ
'data.frame': 3 obs. of 4 variables:
$ NO : int 1 2 3
$ NAME: chr "ํ๊ธธ๋" "lee" "yoo"
$ AGE : chr "35, 25, 45" "35, 25, 45" "35, 25, 45"
$ PAY : num 250 350 250
* obs๊ฐ ์ด, variables๋ ํ
* int๋ ์ด์ฐํ(์ฐ์์ฑ์ด ์๋ ์ ์๋ค), chr๋ ๋ฌธ์ํ, num์ ์ฐ์ํ
3) ์๋ฃ ์ฐธ์กฐ : DF$column (index๋ณด๋ค ์ ํธ๋จ DF:Data Frame)
emp$PAY
mean(pay) #pay๊ฐ์ ํ๊ท
round(mean(pay)) #์์์ ์ดํ๋ฅผ ๋ฐ์ฌ๋ฆผ
pay = emp$PAY
plot(pay)
dim(emp) #3ํ 4์ด
3-2) ์ฐจ๋ฃ ์ฐธ์กฐ : ์์ธ (ํ/์ด ์๋ฃ ์ฐธ์กฐ)
emp[1,]
emp[,4]
4) APPLY()
v1 = 1:5
v2 = 6:10
df = data.frame(v1, v2)
df
apply(df, 2, mean) # ์ด ๋จ์ ํ๊ท ์ถ๋ ฅ
5. LIST ์๋ฃ๊ตฌ์กฐ
1๊ฐ ์์ : ํค=๊ฐ
์๋ก ๋ค๋ฅธ ์๋ฃํ๊ณผ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ฐ๋ ์๋ฃ๊ตฌ์กฐ
list(key=value, key2=value2, ...) vs c(value1, value2, ...)
key๋ฅผ ์ด์ฉํด ๊ฐ๊ฐ์ value๋ฅผ ์ฐธ์กฐ
key ์ค๋ณต๋ถ๊ฐ๊ฐ
1) list(key=value) ํ์
member = list(name='ํ๊ธธ๋', age=35, addr='์์ธ์', gender='๋จ')
* list ํจ์๋ฅผ ์ด์ฉํด ๊ฐ์ฒด ์์ฑ
member
# $name : $key
# [1] "ํ๊ธธ๋" : value
key๋ฅผ ์ด์ฉํด value ์ฐธ์กฐ
member$name #"ํ๊ธธ๋"
member$addr #"์์ธ์"
member$age = 45 #value๊ฐ ์์
member
2) list(value)ํ์ : key ์๋ต
member2 = list ('ํ๊ธธ๋', 35, '์์ธ์', '๋จ')
member2
# [[n]]๊ณผ ๊ฐ์ ๊ธฐ๋ณธ key ์ ๊ณต
member2[[1]] #"ํ๊ธธ๋"
member2[[3]] #"์์ธ์"
member2 = list(c ('ํ๊ธธ๋','์ด์์ '), 35, '์์ธ์', '๋จ')
member2
member2[[1]] #"ํ๊ธธ๋", "์ด์์ "
member2[[1]][2] #"์ด์์ " [2]๋ ๋ฒกํฐ์ ์์ธ
member2[[3]] #"์์ธ์"
list -> vector ๋ณํ (key ์ ๊ฑฐ)
vec = unlist(member2)
vec
6. ๋ฌธ์์ด ์ฒ๋ฆฌ & ์ ๊ทํํ์ (๋ฉํ๋ฌธ์)
install.packages('stringr')
library(stringr)
string = "hong35lee45kang45์ ๊ด์25์ด์ฌ๋์55"
mode(string) #"character"
1) ๋ฐ๋ณต๊ด๋ จ ๋ฉํ๋ฌธ์ : [x]:x์ผ์น, {n}:n๊ฐ ์ฐ์
str_extract(string, '[0-9]{2}') #๋ฌธ์์ด ๋ฐํ. [0๋ถํฐ 9๊น์ง] ์ฐ์๋๋ ์ซ์ {2}๊ฐ ์ถ์ถ
re=str_extract_all(string, '[0-9]{2}') #list๋ฐํ.
unlist(re) #vectorํ์ผ๋ก ์ ํ
์๋ฌธ์ ์ถ์ถ ์ฌ๋ก
str_extract_all(string, '[a-z]{3}') #"hon" "lee" "kan"
str_extract_all(string, '[a-z]{4}') #"hong" "kang"
str_extract_all(string, '[a-z]{3,}') #"hong" "lee" "kang" 3์ ์ด์ ์๋ฌธ ์ถ์ถ
ํ๊ธ ์ถ์ถ ์ฌ๋ก
str_extract_all(string, '[๊ฐ-ํฃ]{3,}') #"์ ๊ด์" "์ด์ฌ๋์" 3์ ์ด์ ํ๊ธ ์ถ์ถ
2) ์ ๋์ด/์ ๋ฏธ์ด ๋ฉํ๋ฌธ์ : ^, $
str_extract_all(string, '^[a-z]') #"h" ์ด๋ค ์ํ๋ฒณ์ผ๋ก ์์ํ๋์ง
str_extract_all(string, '[0-9]$') #"5" ์ด๋ค ์ซ์๋ก ๋๋ฌ๋์ง
3) ๋ถ์ ๋ฉํ๋ฌธ์ : [^x]
str_extract_all(string, '[^0-9]{3,}')
4) ๋ฌธ์์ด ๊ธธ์ด
length(string) #1
str_length(string) #28
5) ๋ฌธ์์ด ๊ต์ฒด
str_replace_all(string, '[0-9]{2}, '-') #๊ต์ฒด
str_replace_all(string, '[0-9]{2}, '') #์ ๊ฑฐ
re = str_replace_all(string, '[0-9]{2}', '')
re
6) ๋ฌธ์์ด ๋ถ๋ฆฌ(split) = ํ ํฐ(๋ฌธ์ฅ์ ๋จ์ด ๋จ์๋ก ๋ถ๋ฆฌ)
string2 = 'ํ๊ธธ๋,์ด์์ ,์ ๊ด์'
names = str_split(string2, ',')
names = unlist(names) #list > vector
names[2] #"์ด์์ "
7) ๋ฌธ์์ด ๊ฒฐํฉ : ๋จ์ด๋ฅผ ๋ฌธ์ฅ์ผ๋ก๋ก
sent = str_c(names, collapse = ' ') #๋จ์ด์ ๋จ์ด๋ฅผ ํ๋์ ๊ณต๋ฐฑ๋ง์ ๋๊ณ ๊ฒฐํฉ์ํฌ ๋
sent #"ํ๊ธธ๋ ์ด์์ ์ ๊ด์"
length(sent) #1
์ฐ์ต๋ฌธ์
01. ๋ค์๊ณผ ๊ฐ์ ๋ฒกํฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ์์ค.
1) Vec1 ๋ฒกํฐ ๋ณ์๋ฅผ ๋ง๋ค๊ณ , 1~5๊น์ง ์ฐ์๋ ์ ์๋ฅผ ๋ง๋์์ค. - c()ํจ์ ์ด์ฉ
vec1 = c(1:5)
vec1
2) Vec2 ๋ฒกํฐ ๋ณ์์ 1~10๊น์ง 3๊ฐ๊ฒฉ์ผ๋ก ์ฐ์๋ ์ ์๋ฅผ ๋ง๋์์ค. - seq()ํจ์ ์ด์ฉ
vec2 = seq(from=1, to=10, by=3)
vec2
3) Vec3 ๋ฒกํฐ ๋ณ์์ "R" ๋ฌธ์๊ฐ 5ํ ๋ฐ๋ณต๋๋๋ก ํ์์ค. - rep()ํจ์ ์ด์ฉ
vec3 = rep('R', 5)
vec3
4) Vec4์๋ Vec1~Vec2๊ฐ ๋ชจ๋ ํฌํจ๋๋ ๋ฒกํฐ๋ฅผ ๋ง๋์์ค. - c()ํจ์ ์ด์ฉ
vec4 = c(vec1, vec2)
vec4
5) 25~ -15๊น์ง 5๊ฐ๊ฒฉ์ผ๋ก ๋ฒกํฐ ์์ฑ - seq()ํจ์ ์ด์ฉ
seq(25, -15, -5)
6) Vec4์์ ํ์๋ฒ์งธ ๊ฐ๋ค๋ง ์ ํํ์ฌ Vec5์ ํ ๋นํ์์ค. - ์์ธ ์ด์ฉ
vec5 = vec4[seq(1, length(vec4), 2)] #1๋ถํฐ vec4๊ฐ ๊ฐ์ง๊ณ ์๋ ์ ์ฒด ๊ธธ์ด๋งํผ 2์ฉ ์ฆ๊ฐ
vec5
02. ๋ค์ ๋ ๊ฐ์ ๋ฒกํฐ๋ฅผ ์ด์ฉํ์ฌ ๋จ๊ณ๋ณ๋ก ์ฒ๋ฆฌํ์์ค.
v1 <- c(2,3,10,-5,8)
v2 <- c(40,50,-30,7,10)
v1
v2
๋จ๊ณ1> ํ ๋จ์๋ก ๋ฌถ์ด์ matrix ์์ฑํ๊ธฐ
v3 = rbind(v1,v2)
v3
๋จ๊ณ2> matrix ์ฐจ์ ๋ณด๊ธฐ
str(v3)
๋จ๊ณ3> matrix ์ด ๋จ์ ํฉ๊ณ ๊ณ์ฐํ๊ธฐ
apply(v3,1,sum)
03. ๋ค์๊ณผ ๊ฐ์ ๋ฒกํฐ๋ฅผ ์นผ๋ผ์ผ๋ก ๊ฐ๋ DataFrame์ ์์ฑํ์์ค.
name <-c("์ต๋ฏผ์","์ ๊ด์", "์ด์์ ","๊น์ ์ ","ํ๊ธธ๋")
age <-c(55,45,45,53,15) #์ฐ๋ น
gender <-c(1,2,1,1,1) #1:๋จ์, 2: ์ฌ์
job <-c("์ฐ์์ธ","์ฃผ๋ถ","๊ตฐ์ธ","์ง์ฅ์ธ","ํ์")
sat <-c(3,4,2,5,5) # ๋ง์กฑ๋
grade <- c("C","C","A","D","A")
total <-c(44.4,28.5,43.5,NA,27.1) #์ด๊ตฌ๋งค๊ธ์ก(NA:๊ฒฐ์ธก์น)
<์กฐ๊ฑด1> ์ 7๊ฐ ๋ฒกํฐ๋ฅผ user์ด๋ฆ์ผ๋ก ๋ฐ์ดํฐ ํ๋ ์ ์์ฑ
user = data.frame(name, age, gender, job, sat, grade, total)
ha
<์กฐ๊ฑด2> ์ด๊ตฌ๋งค๊ธ์ก(total) ๋ณ์๋ฅผ ์ด์ฉํ์ฌ ํ์คํ ๊ทธ๋จ ๊ทธ๋ฆฌ๊ธฐ-hist()
total = user$total1
hist(total)
<์กฐ๊ฑด3> ๋ง์กฑ๋(sat) ๋ณ์๋ฅผ ์ด์ฉํ์ฌ ์ฐ์ ๋ ๊ทธ๋ฆฌ๊ธฐ-plot()
sat = usersat
plot(sat)
04. Data๋ฅผ ๋์์ผ๋ก apply()๋ฅผ ์ ์ฉํ์ฌ ํ/์ด ๋ฐฉํฅ์ผ๋ก ์กฐ๊ฑด์ ๋ง๊ฒ ํต๊ณ๋์ ๊ตฌํ์์ค.
kor <- c(90,85,90)
eng <- c(70,85,75)
mat <- c(86,92,88)
์กฐ๊ฑด1) 3๊ฐ์ ๊ณผ๋ชฉ์ ์๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐํ๋ ์(Data)์ ์์ฑํ๋ค.
la = data.frame(kor, eng, mat)
la
์กฐ๊ฑด2) ํ/์ด ๋ฐฉํฅ์ผ๋ก max()ํจ์๋ฅผ ์ ์ฉํ์ฌ ์ต๋๊ฐ ๊ตฌํ๊ธฐ
round(apply(Data, 1, mean), 2)
์กฐ๊ฑด3) ํ/์ด ๋ฐฉํฅ์ผ๋ก mean()ํจ์๋ฅผ ์ ์ฉํ์ฌ ํ๊ท ๊ตฌํ๊ธฐ(์์ซ์ 2์๋ฆฌ ๊น์ง ํํ)
ํํธ : round(data, ์๋ฆฟ์)
round (la, 2, mean)
์กฐ๊ฑด4) ํ ๋จ์ ๋ถ์ฐ๊ณผ ํ์คํธ์ฐจ ๊ตฌํ๊ธฐ
ํํธ : var(), sd()
var(la)
sd(la)
05. ๋ค์์ Data2 ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ์ ๊ทํํ์์ ์ ์ฉํ์ฌ ๋ฌธ์์ด์ ์ฒ๋ฆฌํ์์ค
Data2 <- c("2017-02-05 ์์
3000์","2017-02-06 ์์
4500์","2017-02-07 ์์
2500์")
library(stringr)
์กฐ๊ฑด1) ์ผ์ง๋ณ ์์
์ ๋ค์๊ณผ ๊ฐ์ด ์ถ๋ ฅํ์์ค.
์ถ๋ ฅ ๊ฒฐ๊ณผ) "3000์" "4500์" "2500์"
str_extract_all(Data2, '[0-9]{4}[๊ฐ-ํฃ]$') #๋ฉํ๋ฌธ์ : [],{}
์กฐ๊ฑด2) ์ ๋ฒกํฐ์์ ์ฐ์ํ์ฌ 2๊ฐ ์ด์ ๋์ค๋ ๋ชจ๋ ์ซ์๋ฅผ ์ ๊ฑฐํ์์ค.
์ถ๋ ฅ ๊ฒฐ๊ณผ)9 "-- ์์
์" "-- ์์
์" "-- ์์
์"
str_replace_all(Data2, '[0-9]{2}','')
์กฐ๊ฑด3) ์ ๋ฒกํฐ์์ -๋ฅผ /๋ก ์นํํ์์ค.
์ถ๋ ฅ ๊ฒฐ๊ณผ) "2017/02/05 ์์
3000์" "2017/02/06 ์์
4500์" "2017/02/07 ์์
2500์"
str_replace_all(Data2, '-','/')
์กฐ๊ฑด4) ๋ชจ๋ ์์๋ฅผ ์ผํ(,)์ ์ํด์ ํ๋์ ๋ฌธ์์ด๋ก ํฉ์น์์ค.
ํํธ) str_c(๋ฐ์ดํฐ์
, collapse="๊ตฌ๋ถ์")ํจ์ ์ด์ฉ
์ถ๋ ฅ ๊ฒฐ๊ณผ) "2017-02-05 ์์
3000์,2017-02-06 ์์
4500์,2017-02-07 ์์
2500์"
str_c(Data2, collapse = ',')
'๋ฐ์ดํฐ๋ถ์๊ฐ ๊ณผ์ > R' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DAY14. R EDA, ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ (0) | 2021.10.01 |
---|---|
DAY13. R Basic (๋ฐ์ดํฐ ์๊ฐํ) (0) | 2021.09.30 |
DAY12. R Basic (์ ์ด๋ฌธ๊ณผ ํจ์) (0) | 2021.09.29 |
DAY11. R Basic (๋ฐ์ดํฐ ์ ์ถ๋ ฅ) (0) | 2021.09.28 |
DAY09. R Basic (ํจํค์ง์ ์ธ์ , ๋ณ์์ ์๋ฃํ) (0) | 2021.09.24 |