벡터에 적용 가능한 함수

# 코드 3
d <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)  # 벡터 d를 생성
sum(d)  # d의 모든 요소를 더함
# [1] 55

sum(2 * d)  # d의 모든 요소를 2배로 늘린 후 더함
# [1] 110

length(d)  # d의 요소 개수를 반환
# [1] 10

mean(d[1:5])  # d의 첫 5개 요소의 평균을 계산
# [1] 3

max(d)  # d의 최대값을 반환
# [1] 10

min(d)  # d의 최소값을 반환
# [1] 1

sort(d)  # d를 오름차순으로 정렬
# [1]  1  2  3  4  5  6  7  8  9 10

sort(d)  # 동일한 결과를 다시 출력
# [1]  1  2  3  4  5  6  7  8  9 10

sort(d, decreasing = FALSE)  # d를 오름차순으로 정렬 (기본값)
# [1]  1  2  3  4  5  6  7  8  9 10

sort(d, decreasing = TRUE)  # d를 내림차순으로 정렬
# [1] 10  9  8  7  6  5  4  3  2  1

v1 <- median(d)  # d의 중앙값을 계산
v1  # 중앙값 출력
# [1] 5.5

v2 <- sum(d) / length(d)  # d의 평균을 계산 (합계 / 요소 개수)
v2  # 평균 출력
# [1] 5.5

벡터에 논리연산자 적용

# 코드 4
d <- c(1, 2, 3, 4, 5, 6, 7, 8, 9)  # 벡터 d를 생성

d >= 5  # d의 각 요소가 5 이상인지 확인
# [1] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE

d[d > 5]  # d에서 5보다 큰 요소만 선택
# [1] 6 7 8 9

sum(d > 5)  # d에서 5보다 큰 요소의 개수를 계산
# [1] 4

sum(d[d > 5])  # d에서 5보다 큰 요소의 합을 계산
# [1] 30

d == 5  # d의 각 요소가 5와 같은지 확인
# [1] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE

condi <- d > 5 & d < 8  # d의 요소가 5보다 크고 8보다 작은 조건
d[condi]  # 조건을 만족하는 d의 요소 선택
# [1] 6 7

리스트(List)

-다양한 데이터 유형의 요소 저장(동일값 저장, 여러 자료형을 혼합, 중복 가능)

-서로 다른 자료형의 값들을 1차원 배열에 저장하고 다룰 수 있도록 해주는 수단

- $,  [[]] 를 사용

ex)필통 안에 연필, 지우개, 색연필이 다 들어 있는 것처럼, 리스트는 다양한 데이터를 한 곳에 모아 놓은 것

# 코드 6
# 리스트 생성
my_list <- list(name = "john", age = 25, scores = c(88, 92, 95))  # 이름, 나이, 점수를 포함한 리스트 생성

# 리스트의 요소에 접근
print(my_list$name)  # name 요소 출력
# [1] "john"

print(my_list$age)  # age 요소 출력
# [1] 25

print(my_list$scores)  # scores 요소 출력
# [1] 88 92 95

팩터(factors)

-하나의 데이터형(동일값 없음, 중복X(단일 품목))

-벡터의 일존으로서 값의 종류가 정해져 있는 범주형 자료의 저장에 사용

-범주형 자료 예시: 성별, 혈액형, 선호 계절 등

ex)필통 안의 물건들을 "연필", "지우개", "색연필"로 분류한 것처럼, 팩터는 데이터를 특정 그룹으로 나누어 정리한 것

 

*R 데이터 구조 비교

: 리스트: 다양한 타입의 상자

팩터: 미리 정해진 카테고리를 가진 상자

# 코드 8
# 팩터 생성
colors <- factor(c("red", "blue", "green", "red", "blue"))  # 색상 벡터를 팩터로 변환

# 팩터 출력
print(colors)  # 생성된 팩터 출력
# [1] red   blue  green red   blue 
# Levels: blue green red  (팩터의 레벨이 출력됨)

# 팩터의 레벨 확인
levels(colors)  # 팩터의 레벨을 확인
# [1] "blue"  "green" "red"  

# 팩터의 각 레벨에 대한 빈도수 확인
table(colors)  # 각 레벨에 대한 빈도수를 계산
# colors
#  blue green   red 
#     2     1     2

매트릭스

-1차원 데이터: 몸무게 데이터와 같은 단일 주제의 데이터-> 벡터

-2차원 데이터: 키, 나이,와 같은 여러 주제의 데이터-> 매트릭스, 데이터프레임

                   -데이터 테이블의 모든 셀의 값들이 동일한 자료형->매트릭스

                   -자료형이 다른 값들로 구성->데이터프레임

 

 

 

 

-기존 매트릭스에 벡터를 추가해, 새로운 매트릭스 만들기

 

-cbind(벡터1, 벡터2)->벡터1과 벡터2를 열방향으로 결합

-rbind(벡터1, 벡터2)->벡터1과 벡터2를 행방향으로 결합

# 코드 11
x <- c(1:4)  # 벡터 x 생성
y <- c(5, 8)  # 벡터 y 생성
z <- matrix(1:20, nrow = 4, ncol = 5)  # 매트릭스 z 생성

m1 <- cbind(x, y)  # x와 y를 열 방향으로 결합하여 매트릭스 생성
m1  # 매트릭스 m1의 내용을 출력
#     [,1] [,2]
# [1,]    1    5
# [2,]    2    8
# [3,]    3   NA
# [4,]    4   NA

m2 <- rbind(x, y)  # x와 y를 행 방향으로 결합하여 매트릭스 생성
m2  # 매트릭스 m2의 내용을 출력
#     [,1] [,2] [,3] [,4]
# [1,]    1    2    3    4
# [2,]    5   NA   NA   NA

m4 <- cbind(z, x)  # 매트릭스 z와 벡터 x를 열 방향으로 결합
m4  # 매트릭스 m4의 내용을 출력
#      [,1] [,2] [,3] [,4] [,5] [,6]
# [1,]    1    5   9   13   17    1
# [2,]    2    6  10   14   18    2
# [3,]    3    7  11   15   19    3
# [4,]    4    8  12   16   20    4

# 코드 12
z <- matrix(1:20, nrow = 4, ncol = 5)  # 매트릭스 z 생성
z  # 매트릭스 z의 내용 출력
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    5    9   13   17
# [2,]    2    6   10   14   18
# [3,]    3    7   11   15   19
# [4,]    4    8   12   16   20

# 특정 값 접근
z[2, 3]  # 2행 3열에 있는 값
# [1] 10

z[1, 4]  # 1행 4열에 있는 값
# [1] 13

z[2, ]   # 2행에 있는 모든 값
# [1]  2  6 10 14 18

z[, 4]   # 4열에 있는 모든 값
# [1] 13 14 15 16

# 코드 13
z[2, 1:3]  # 2행의 값 중 1~3열에 있는 값
# [1]  2  6 10

z[1, c(1, 2, 4)]  # 1행의 값 중 1, 2, 4열에 있는 값
# [1]  1  5 13

z[1:2, ]  # 1, 2행에 있는 모든 값
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    5    9   13   17
# [2,]    2    6   10   14   18

z[, c(1, 4)]  # 1, 4열에 있는 모든 값
#      [,1] [,2]
# [1,]    1   13
# [2,]    2   14
# [3,]    3   15
# [4,]    4   16

# 코드 14
score <- matrix(c(90, 85, 69, 78, 85, 96, 49, 95, 90, 80, 70, 60), nrow = 4, ncol = 3)
rownames(score) <- c('John', 'Tom', 'Mark', 'Jane')  # 행 이름 설정
colnames(score) <- c('English', 'Math', 'Science')  # 열 이름 설정
score  # score 매트릭스 출력
#        English Math Science
# John       90   85      69
# Tom        78   85      96
# Mark       49   95      90
# Jane       80   70      60

# 코드 15
score['John', 'Math']  # John의 수학 성적
# [1] 85

score['Tom', c('Math', 'Science')]  # Tom의 수학, 과학 성적
# Math Science 
#   85      96

score['Mark', ]  # Mark의 모든 과목 성적
# English Math Science 
#      49   95      90

score[, 'English']  # 모든 학생의 영어 성적
# [1] 90 78 49 80

rownames(score)  # score의 행 이름
# [1] "John" "Tom"  "Mark" "Jane"

colnames(score)  # score의 열 이름
# [1] "English" "Math"    "Science"

colnames(score)[2]  # score의 열 이름 중 두 번째 값
# [1] "Math"

데이터프레임

-숫자형 벡터, 문자형 벡터 등 서로 다른 형태의 데이터를 2차원 데이터 테이블 형태로 묶을 수 있는 자료구조

-외관상으로는 매트릭스와 차이가 없지만 매트릭스에 저장되는 모든 값들이 동일한 자료형(ex 모두 숫자)인과는 달리 

데이터프레임에는 서로다른 자료형의 값들이 함께 저장(ex 성별, 나이 등)

 

 

-자료형이 같을 수도 있고 다를 수도 있는 여러 개의 벡터를 세로 방향으로 묶어 놓은 개념

data.frame(벡터1, 벡터2)

# 코드 16
city <- c("Seoul", "Tokyo", "Washington")  # 문자로 이루어진 벡터
rank <- c(1, 3, 2)  # 숫자로 이루어진 벡터
city.info <- data.frame(city, rank)  # 데이터프레임 생성
city.info  # city.info의 내용 출력
#          city rank
# 1      Seoul    1
# 2      Tokyo    3
# 3 Washington    2

 

iris데이터셋

-R에서 제공하는 실습용 데이터셋 중의 하나로 데이터프레임으로 되어 있음

-150그루의 붓꽃에 대한 4개의 분야의 측정데이터와 품목 정보를 결합하여 만든 데이터셋(통계학과 머신러닝에서 널리 사용되는 유명한 실습용 데이터셋)

# 코드 17
iris[, c(1, 2)]  # 1, 2열의 모든 데이터
#   Sepal.Length Sepal.Width
# 1           5.1          3.5
# 2           4.9          3.0
# 3           4.7          3.2
# 4           4.6          3.1
# 5           5.0          3.6

iris[, c(1, 3, 5)]  # 1, 3, 5열의 모든 데이터
#   Sepal.Length Petal.Length Species
# 1           5.1          1.4  setosa
# 2           4.9          1.4  setosa
# 3           4.7          1.3  setosa
# 4           4.6          1.5  setosa
# 5           5.0          1.4  setosa

iris[, c("Sepal.Length", "Species")]  # 1, 5열의 모든 데이터
#   Sepal.Length Species
# 1           5.1  setosa
# 2           4.9  setosa
# 3           4.7  setosa
# 4           4.6  setosa
# 5           5.0  setosa

iris[1:5, ]  # 1~5행의 모든 데이터
#   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1           5.1          3.5          1.4         0.2  setosa
# 2           4.9          3.0          1.4         0.2  setosa
# 3           4.7          3.2          1.3         0.2  setosa
# 4           4.6          3.1          1.5         0.2  setosa
# 5           5.0          3.6          1.4         0.2  setosa

iris[1:5, c(1, 3)]  # 1~5행의 데이터 중 1, 3열의 데이터
#   Sepal.Length Petal.Length
# 1           5.1          1.4
# 2           4.9          1.4
# 3           4.7          1.3
# 4           4.6          1.5
# 5           5.0          1.4

'R' 카테고리의 다른 글

조건문, 반복문, 함수  (0) 2025.04.05
R의 기본연산/ 변수/ 벡터의 이해  (0) 2025.03.08

+ Recent posts