[R] R 데이터구조 관련 함수 - 벡터Vector, 행렬Matrix, 팩터Factor, 배열Array

isitcake_yes·2022년 10월 26일
0
post-thumbnail

🔍 벡터 Vector

⭐️ 벡터 생성 : c(), seq(), rep(), names()

v1 <- c(1, 2, 3)  
v2 <- c(4, 5, 6)  
v1; v2
#> [1] 1 2 3
#> [1] 4 5 6

v3 <- c(v1, v2)   
v3
#> [1] 1 2 3  4 5 6
# seq() 연속값
var1 <- c(1:6)   # 1~6까지의 연속 값
var2 <- seq(1, 6)   # 1~6까지의 연속 값
var1; var2
#> [1] 1 2 3 4 5 6
#> [1] 1 2 3 4 5 6
var3 <- seq(1, 6, by = 2)   # 1~10까지 2간격의 연속값
var4 <- seq(1, 6, by = 3)   # 1~10까지 3간격의 연속값
var5 <- seq(from = 1, to = 2, length.out = 5)
var3; var4; var5
#> [1] 1 3 5 
#> [1]  1  4  
#> [1] 1.00 1.25 1.50 1.75 2.00
# rep() 반복값 
var6 <- rep(3, times = 5)  # 5를 7번 반복 
var7 <- rep(c("a", "b"), each = 3)  # 각 문자 3번 반복
var6; var7
#> [1] 3 3 3 3 3
#> [1] "a" "a" "a" "b" "b" "b"
# names() 값마다 이름 부여
mbti <- c("INFP", "ENTP", "ESFP")
names(mbti) <- c("김땡땡", "문땡땡", "박땡땡")
# mbti <- c(김땡땡="INFP",문땡땡= "ENTP",박땡땡="ESFP") 와 동일

mbti
# 김땡땡 문땡땡 박땡땡 
# "INFP" "ENTP" "ESFP" 

⭐️ 벡터 요소 추출 및 제외 : 특정위치로, 이름으로, 조건으로

# 이름으로 추출
mbti["김땡땡"] #> 김땡땡 "INFP"

# 특정 위치 요소 추출
v <- c(11, 12, 13, 14, 15)
v[2:3]               #> [1] 12 13
v[c(1,2,4)]          #> [1] 11 12 14
v[seq(1, 5, 2)]      #> [1] 11 13 15

# - 기호로 요소 제외
v[-2] 				 #> [1] 11 13 14 15
v[-c(3:4)]			 #> [1] 11 12 15

# 조건으로 추출
s <- c(3, 1, 5, 9, 7, 10)  
s[s>=7]              #> [1]  9  7 10
subset(s, s>=7)      #> [1]  9  7 10
# s>=7인 요소의 인덱스 추출
which(s>=7)          #> [1] 4 5 6

⭐️ 벡터 연산

v <- c(11, 12, 13, 14, 15)
v - mean(v) #> [1] -2 -1  0  1  2
sum(v) #> 65
w <- c(1, 2, 3, 4, 5)
sqrt(w) # [1] 1.00 1.41 1.73 2.00 2.24

🔍 행렬 Matrix

⭐️ 행렬 생성 : matrix(), cbind(), rbind()

# ncol : 열의 수, nrow : 행의 수
m1 <- matrix(1:12, ncol = 3)
m1
#>      [,1] [,2] [,3]
#> [1,]    1    5    9
#> [2,]    2    6   10
#> [3,]    3    7   11
#> [4,]    4    8   12

# byrow = TRUE : row로 채워짐
m2 <- matrix(data = c(1:6), nrow = 2, byrow = TRUE)
m2
#>      [,1] [,2] [,3]
#> [1,]    1    2    3
#> [2,]   11   12   13

# cbind() 열 병합, rbind() 행 병합
# 숫자 벡터 생성
first <- c(1,2,3,4)
second <- c(5,6,7,8)
third <- c(9,10,11,12)

# 열 기준으로 벡터 병합 
m3 <- cbind(first, second, third)
m3
#>      first second third
#> [1,]    1    5    9
#> [2,]    2    6    10
#> [3,]    3    7    11
#> [4,]    4    8    12

#행 기준으로 벡터 병합
m4 <- rbind(first, second, third)
m4
#       [,1] [,2] [,3] [,4]
#first     1    2    3    4
#second    5    6    7    8
#third     9   10   11   12

⭐️ 행렬 이름 붙이기 : rownames(), colnames(), dimnames()

rownames(m3) <- c("행1", "행2", "행3", "행4", "행5")
colnames(m3) <- c("열1", "열2", "열3")
m3
#>     열1 열2 열3
#> 행1   5   2   7
#> 행2   6   4   3
#> 행3   7   5   4
#> 행4   8   9   8
#> 행5   9   8   7

m4 <- matrix(
  data = c(1,2,3, 11,12,13),
  nrow = 2, byrow = TRUE,
  dimnames = list(c("행1", "행2"), c("열1", "열2", "열3"))
  )
m4
#>       열1  열2   열3
#> 행1    1    2    3
#> 행2   11   12   13

⭐️ 행렬 차원 : nrow(), ncol(), dim(), t()

t(m) # 행렬 전치
nrow(m) # 행 개수
ncol(m) # 열 개수
dim(m) # 행렬 개수

⭐️ 행렬 요소 추출 및 제외 :특정위치로, 이름으로, 조건으로

m[2,] # 2번째 행 요소 추출
m[2,3] # 2행 3열 요소 추출
m[1:5,] # 1-5번째 행 요소 추출
m[c(2,4),] # 2,4번째 행 요소 추출
m[,"열1"] # 열1 추출
m["행3",] # 행3 추출
m[-2, -2] # 2행 2열 제외
col3 <- m[, 3]
m[col3 >= 5,] # 3열의 값이 5이상인 경우 추출
m[m>1] # 1보다 큰 수 모두 추출

⭐️ 행렬 요소 수정

mm[mm < 10] <- 0  # mm에서 10보다 작은 수 0으로 수정
mm[2, 2] <- 9     # mm에서 2행2열의 값 9로 수정

⭐️ 행렬 연산

m1 * 2    # 모든 값에 x 2 
log2(m1)  # 모든 값에 log2 취함
rowSums(m3)
colSums(m3)

🔍 팩터 Factor

⭐️ 팩터 변수 만들기

  • 팩터는 범주형(명목형) 자료의 데이터 구조이다. 분석 시, factor 형식의 구조여야하는 경우가 종종 있다.
diz <- factor(c("양성", "음성", "음성", "양성", "양성"))
diz
# [1] 양성 음성 음성 양성 양성
# Levels: 양성 음성

sex <- c("여성", "남성", "여성")
sex <- factor(sex, levels = c("여성", "남성"))
sex
# [1] 여성 남성 여성
# Levels: 여성 남성

⭐️ 팩터 요소 수정

# level 추가 
levels(diz) <- c(levels(diz), "악성")
diz[1] <- "악성"
diz
# [1] 악성 음성 음성 양성 양성
# Levels: 양성 음성 악성

🔍 배열 Array

: 2차원 이상의 구조, 행렬을 쌓은 구조, 행렬 문법과 거의 유사함.

# 
arr1 <- array(1:24, dim = c(3, 4, 2))
arr1
# , , 1
# 
#      [,1] [,2] [,3] [,4]
# [1,]    1    4    7   10
# [2,]    2    5    8   11
# [3,]    3    6    9   12
# 
# , , 2
# 
#      [,1] [,2] [,3] [,4]
# [1,]   13   16   19   22
# [2,]   14   17   20   23
# [3,]   15   18   21   24

# data, dim, dimnames
arr2 <- array(data=1:12, dim = c(2, 3, 2), dimnames = list(c("x1","x2"), c("y1","y2","y3"), c("z1","z2")))
arr2
# , , z1
#
#   y1 y2 y3
# x1  1  3  5
# x2  2  4  6
#
# , , z2
#
#   y1 y2 y3
# x1  7  9 11
# x2  8 10 12

arr2[,,"z1"] # z1 요소 추출
#   y1 y2 y3
# x1  1  3  5
# x2  2  4  6

🔍 데이터프레임 Data Frame

⭐️ 데이터프레임 구조 : data.frame(), str(), nrow(), ncol(), summary()

library(MASS)
df <- Boston
str(df) # 데이터 프레임 구조
# 'data.frame':	506 obs. of  14 variables:
# $ crim   : num  0.00632 0.02731 0.02729 0.03237 0.06905 ...
# $ zn     : num  18 0 0 0 0 0 12.5 12.5 12.5 12.5 ..
..

nrow(df) # 506
ncol(df) # 14
length(df) # 14

names(df) # 컬럼명 추출

summary(df) # 데이터프레임 각 변수별 요약

colMeans(df) # 컬럼별 평균

⭐️ 데이터프레임 데이터 추출 및 제외 :특정위치로, 이름으로, 조건으로

# 첫번째 열 추출 
df$crim
df[,"crim"]
df[,1]

# 특정 행 추출
df[1:3,] # 1-3번째 행

# 특정 데이터 추출
df[2,"crim"]
df$crim[2]
df[2,1]

# 제외 
df[, -1] # 첫번째 열 제외

# 조건
df[df$crim < 0.1, ]

crim01 <- df$crim < 0.1
cols <- c("crim", "medv")
df[crim01, cols]

subset(df, crim < 0.1)
subset(df, crim < 0.1, select = -(zn)) # zm컬럼 제외

⭐️ 데이터프레임 수정, 추가, 삭제

# 수정
df$age[2] <- 29
df[3, "score"] <- 95

# 행추가
new_data <- list("김땡땡", 26, "여", 97)
df <- rbind(df, new_data)

# 열추가
df$salary <- c(220, 180, 250, 170, 220, 270, 250, 290, 210)
or
salary2 <- c(220, 180, 250, 170, 220, 270, 250, 290, 210)
df <- cbind(df, salary2)

# 행 삭제
df <- df[!df$score < 80, ] # score 80이하인 행 삭제 

# 열 삭제
df$salary3 <- NULL # salary3 열 삭제
df <- df[, -(1:3)] # 1~3번째 열 제외


Ref

profile
주니어 개발자 주니어발록 주니어예티 주니어레이스

0개의 댓글