1. 데이터 이름 변경

R에서는 데이터 프레임의 열 이름을 변경하는 것을 포함하여 여러 데이터 객체의 이름을 변경할 수 있습니다. 가장 일반적으로 사용되는 방법은 데이터 프레임의 열 이름을 변경하는 것입니다.

# 데이터 프레임 생성
df <- data.frame(
  Name = c("Alice", "Bob", "Charlie"),
  Age = c(25, 30, 35)
)

# 열 이름 변경
names(df) <- c("Person", "Years")

# 변경된 열 이름 출력
print(names(df))  # 출력: "Person" "Years"

 

2. 데이터 추출

R에서는 인덱싱(indexing)을 사용하여 데이터 프레임 또는 벡터에서 특정 부분 집합을 추출할 수 있습니다. 이는 데이터 프레임의 특정 행이나 열을 선택하거나, 벡터에서 특정 원소를 선택하는 등의 작업을 포함합니다.

# 데이터 프레임 생성
df <- data.frame(
  Name = c("Alice", "Bob", "Charlie"),
  Age = c(25, 30, 35)
)

# 열 이름을 사용하여 특정 열 추출
ages <- df$Age
print(ages)  # 출력: 25 30 35


# 특정 행 추출 (인덱싱 사용)
row <- df[2, ]
print(row)
# 출력:
#    Name Age
# 2   Bob  30

 

 

3. 데이터 결합

R에서는 데이터를 수평적으로 또는 수직적으로 결합할 수 있는 여러 함수를 제공합니다. 가장 일반적으로 사용되는 함수는 cbind()와 rbind()입니다.

 

  • cbind(): 열(column)을 기준으로 데이터를 결합합니다.
# 데이터 프레임 생성
df1 <- data.frame(
  Name = c("Alice", "Bob", "Charlie"),
  Age = c(25, 30, 35)
)

df2 <- data.frame(
  Name = c("David", "Eve"),
  Age = c(40, 45)
)

# 열을 기준으로 데이터 프레임 결합
combined <- cbind(df1, df2)
print(combined)
# 출력:
#      Name Age  Name Age
# 1   Alice  25 David  40
# 2     Bob  30   Eve  45
# 3 Charlie  35  <NA>  NA

 

  • rbind(): 행(row)을 기준으로 데이터를 결합합니다.
# 데이터 프레임 생성
df1 <- data.frame(
  Name = c("Alice", "Bob", "Charlie"),
  Age = c(25, 30, 35)
)

df2 <- data.frame(
  Name = c("David", "Eve"),
  Age = c(40, 45)
)

# 행을 기준으로 데이터 프레임 결합
combined <- rbind(df1, df2)
print(combined)
# 출력:
#      Name Age
# 1   Alice  25
# 2     Bob  30
# 3 Charlie  35
# 4   David  40
# 5     Eve  45

 

 

 

 

[참고 도서]

출처 :

이지패스 2024 ADsP 데이터분석 준전문가

🔷기본 함수

1. help

help 함수는 R의 도움말 시스템을 호출하여 특정 함수나 주제에 대한 문서를 제공합니다. ? 연산자도 동일한 기능을 합니다.

# 함수에 대한 도움말 보기
help(paste)
# 또는
?paste

2. paste

paste 함수는 여러 문자열을 결합하는 함수입니다. paste0 함수는 공백 없이 문자열을 결합합니다.

# 기본 사용법
str1 <- "Hello"
str2 <- "World"
result <- paste(str1, str2)
print(result)  # 출력: "Hello World"

# 구분자 지정
result <- paste(str1, str2, sep = ", ")
print(result)  # 출력: "Hello, World"

# paste0 사용 예시
result <- paste0(str1, str2)
print(result)  # 출력: "HelloWorld"

3. seq

seq 함수는 수열(sequence)을 생성하는 함수입니다. 시작 값, 끝 값, 증가값 등을 지정할 수 있습니다.

# 1부터 10까지의 수열 생성
sequence <- seq(1, 10)
print(sequence)  # 출력: 1 2 3 4 5 6 7 8 9 10

# 1부터 10까지 2씩 증가하는 수열 생성
sequence <- seq(1, 10, by = 2)
print(sequence)  # 출력: 1 3 5 7 9

# 1부터 10까지 총 5개의 숫자를 균등하게 배치
sequence <- seq(1, 10, length.out = 5)
print(sequence)  # 출력: 1 3.25 5.5 7.75 10

4. rep

rep 함수는 주어진 값을 반복하는 함수입니다. 반복 횟수 또는 패턴을 지정할 수 있습니다.

# 숫자 1을 5번 반복
repeated <- rep(1, 5)
print(repeated)  # 출력: 1 1 1 1 1

# 벡터를 3번 반복
repeated <- rep(c(1, 2, 3), 3)
print(repeated)  # 출력: 1 2 3 1 2 3 1 2 3

# 각 요소를 지정된 횟수만큼 반복
repeated <- rep(c(1, 2, 3), each = 2)
print(repeated)  # 출력: 1 1 2 2 3 3

5. rm

rm 함수는 R 환경에서 변수 또는 객체를 삭제하는 함수입니다.

# 변수 생성
x <- 10
y <- 20

# 변수 삭제
rm(x)

# 변수 목록 확인
print(ls())  # 출력: "y" (x는 삭제되었기 때문에 출력되지 않음)

6. ls

ls 함수는 현재 R 환경에 존재하는 객체(변수, 함수 등)의 이름을 반환합니다.

# 변수 생성
a <- 1
b <- 2

# 현재 환경의 객체 목록 확인
print(ls())  # 출력: "a" "b"

# 특정 패턴의 객체 목록 확인
print(ls(pattern = "a"))  # 출력: "a"

7. print

print 함수는 객체의 내용을 출력하는 기본 함수입니다. 주로 결과를 화면에 출력할 때 사용됩니다.

# 숫자 출력
print(123)

# 문자열 출력
print("Hello, World!")

# 벡터 출력
vec <- c(1, 2, 3)
print(vec)

 

 

🔷통계 함수

sum() : 벡터 또는 숫자의 합을 계산합니다.

mean() : 평균을 계산합니다.

median() : 중앙값을 계산합니다.

var() : 분산을 계산합니다.

sd() : 표준 편차를 계산합니다.

max(), min() : 최댓값과 최솟값을 계산합니다.

range() : 범위를 계산합니다.

summary() : 데이터의 기술 통계량을 요약하여 보여줍니다

skewness() : 입력된 값의 왜도를 구한다.

kurtosis() : 입력된 값의 첨도를 구한다.

 

vec <- c(1, 2, 3, 4, 5)
total_sum <- sum(vec)
print(total_sum)  # 출력: 15


avg <- mean(vec)
print(avg)  # 출력: 3


med <- median(vec)
print(med)  # 출력: 3


variance <- var(vec)
print(variance)  # 출력: 2.5


std_dev <- sd(vec)
print(std_dev)  # 출력: 1.581139


maximum <- max(vec)
minimum <- min(vec)
print(maximum)  # 출력: 5
print(minimum)  # 출력: 1


range_val <- range(vec)
print(range_val)  # 출력: 1 5


summary_stats <- summary(vec)
print(summary_stats)
# 출력:
#   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
#   1.00    2.25    3.00    3.00    4.00    5.00


library(e1071)
skew <- skewness(vec)
print(skew)


kurt <- kurtosis(vec)
print(kurt)

 

 

 

[참고 도서]

출처 :

이지패스 2024 ADsP 데이터분석 준전문가

🔷 벡터

  • 벡터는 동일한 데이터 타입을 가진 요소들의 1차원 배열로, 숫자형, 문자형, 논리형 등 다양한 데이터 타입을 가질 수 있습니다.
  • 벡터는 c() 함수를 사용하여 생성할 수 있습니다. c는 concatenate의 약자로, 여러 값을 하나의 벡터로 연결
# 숫자형 벡터
num_vector <- c(1, 2, 3, 4, 5)
print(num_vector)  # 출력: 1 2 3 4 5

# 문자형 벡터
char_vector <- c("apple", "banana", "cherry")
print(char_vector)  # 출력: "apple" "banana" "cherry"

# 논리형 벡터
log_vector <- c(TRUE, FALSE, TRUE)
print(log_vector)  # 출력: TRUE FALSE TRUE

 

 

🔷 행렬

  • 행렬(Matrix)은 R에서 2차원 데이터 구조로, 동일한 데이터 타입을 가지는 요소들로 구성된 사각형 배열
  • 행렬은 주로 선형 대수와 데이터 분석에서 사용되며, R에서는 다양한 함수를 통해 행렬을 생성하고 조작할 수 있습니다.
> m1 <-matrix(c(1:6), nrow=2)
> m1
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6



> m2 <-matrix(c(1:6), ncol=2)
> m2
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6



> m3 <-matrix(c(1:6), nrow=2, byrow=T)
> m3
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6

 

행렬의 속성

  • nrow: 행의 수
  • ncol: 열의 수
  • dim: 행렬의 차원 (행의 수와 열의 수)
  • byrow 옵션에 T(TRUE)를 지정하면 값들이 열이 아닌 행으로 저장

 

🔷 배열

  • 배열은 2차원 이상의 행렬로 생각할 수 있으며, 3차원 이상도 가능합니다.
  • 배열을 사용하여 다양한 차원의 데이터를 관리
  • 하나의 배열에 포함된 데이터는 모두 같은 타입
  • 배열은 array() 함수를 사용하여 생성, 몇 차원의 구조를 갖는지 dim 옵션에 명시
  • 명시하지 않으면 1차원 벡터
# 3차원 배열 생성
# 3행 4열 2슬라이스
arr <- array(1:24, dim = c(3, 4, 2))
print(arr)


, , 1 #슬라이스1

     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

, , 2 #슬라이스2

     [,1] [,2] [,3] [,4]
[1,]   13   16   19   22
[2,]   14   17   20   23
[3,]   15   18   21   24

 

 

  • dim = c(3, 4, 2)는 배열이 3개의 행, 4개의 열, 2개의 슬라이스를 가짐을 의미합니다.
  • 첫 번째 차원: 3 (행의 수)
  • 두 번째 차원: 4 (열의 수)
  • 세 번째 차원: 2 (슬라이스 또는 레이어의 수)

 

🔷 리스트

  • 리스트(List)는 R에서 서로 다른 데이터 타입의 요소들을 저장할 수 있는 데이터 구조
  • 벡터, 행렬, 데이터 프레임과 달리, 리스트는 숫자, 문자열, 논리값, 다른 리스트 등 다양한 타입의 데이터를 포함
  • 리스트는 성분 간에 이질적인 특징을 가지고 있다.

 

# 리스트 생성
my_list <- list(
  num = 42,
  str = "Hello, world!",
  vec = c(1, 2, 3),
  mat = matrix(1:4, nrow = 2),
  nested_list = list(a = 1, b = 2)
)

print(my_list)



$num
[1] 42

$str
[1] "Hello, world!"

$vec
[1] 1 2 3

$mat
     [,1] [,2]
[1,]    1    3
[2,]    2    4

$nested_list
$nested_list$a
[1] 1

$nested_list$b
[1] 2

 

 

🔷 데이터프레임

  • 데이터프레임(Data Frame)은 R에서 가장 많이 사용되는 데이터 구조 중 하나로, 표 형태의 데이터를 저장합니다.
  • 행(row)과 열(column)로 구성됩니다.
  • 각 열은 벡터 형태로 저장되며, 서로 다른 데이터 타입을 가질 수 있습니다.
  • 데이터프레임은 통계 분석, 데이터 시각화, 머신 러닝 등 다양한 작업에서 사용
# 데이터프레임 생성
df <- data.frame(
  Name = c("Alice", "Bob", "Charlie"),
  Age = c(25, 30, 35),
  Gender = c("F", "M", "M")
)

print(df)






     Name Age Gender
1   Alice  25      F
2     Bob  30      M
3 Charlie  35      M

데이터프레임의 속성

  • 행 이름: 각 행은 이름(기본적으로 숫자)을 가집니다.
  • 열 이름: 각 열은 이름을 가지며, 서로 다른 데이터 타입을 가질 수 있습니다.

 

 

 

 

 

 

[참고 도서]

출처 :

이지패스 2024 ADsP 데이터분석 준전문가

🔷연산자

 

⚫대입연산자

# <- 사용
x <- 5
print(x)  # 출력: 5

# -> 사용
5 -> y
print(y)  # 출력: 5

# = 사용
z = 10
print(z)  # 출력: 10

# assign() 함수 사용
assign("w", 20)
print(w)  # 출력: 20

 

  • <-, <<-: 가장 일반적으로 사용되는 대입 연산자입니다.
  • ->, ->>: 덜 사용되지만 오른쪽에서 왼쪽으로 값을 대입할 때 사용됩니다.
  • =: 변수 대입보다는 함수의 인수 할당에 더 많이 사용됩니다.
  • assign(): 문자열로 변수 이름을 지정할 때 사용됩니다.

 

⚫비교연산자

 

# 변수 설정
a <- 7
b <- 5

# 비교 연산자 사용
print(a == b)  # FALSE
print(a != b)  # TRUE
print(a < b)   # FALSE
print(a > b)   # TRUE
print(a <= b)  # FALSE
print(a >= b)  # TRUE

 

  • ==: 두 값이 같은지 비교
  • !=: 두 값이 다른지 비교
  • <: 왼쪽 값이 오른쪽 값보다 작은지 비교
  • >: 왼쪽 값이 오른쪽 값보다 큰지 비교
  • <=: 왼쪽 값이 오른쪽 값보다 작거나 같은지 비교
  • >=: 왼쪽 값이 오른쪽 값보다 크거나 같은지 비교
  • is.character : 문자형인지 아닌지 비교
  • is.numeric : 숫자형인지 아닌지 비교
  • is.logical : 논리형인지 아닌지 비교
  • is.na : NA인지 아닌지를 비교
  • is.null : NULL인지 아닌지 비교

 

 

⚫ 산술 연산자

# 변수 설정
a <- 10
b <- 3

# 덧셈
addition <- a + b
print(addition)  # 출력: 13

# 뺄셈
subtraction <- a - b
print(subtraction)  # 출력: 7

# 곱셈
multiplication <- a * b
print(multiplication)  # 출력: 30

# 나눗셈
division <- a / b
print(division)  # 출력: 3.333333

# 거듭제곱
exponentiation <- a ^ b
print(exponentiation)  # 출력: 1000

# 모듈로 (나머지)
modulus <- a %% b
print(modulus)  # 출력: 1

# 정수 나눗셈
integer_division <- a %/% b
print(integer_division)  # 출력: 3

 

  • +: 덧셈
  • -: 뺄셈
  • *: 곱셈
  • /: 나눗셈
  • ^, **: 거듭제곱
  • %%: 모듈로 (나머지)
  • %/%: 정수 나눗셈
  • exp() : 자연상수의 거듭제곱

⚫ 논리연산자

 

# 변수 설정
a <- c(TRUE, FALSE, TRUE)
b <- c(FALSE, TRUE, FALSE)

# 논리 AND
result_and <- a & b
print(result_and)  # 출력: FALSE, FALSE, FALSE

# 논리 OR
result_or <- a | b
print(result_or)  # 출력: TRUE, TRUE, TRUE

# 논리 NOT
result_not <- !a
print(result_not)  # 출력: FALSE, TRUE, FALSE

# 단일 요소 논리 AND
x <- TRUE
y <- FALSE
result_single_and <- x && y
print(result_single_and)  # 출력: FALSE

# 단일 요소 논리 OR
result_single_or <- x || y
print(result_single_or)  # 출력: TRUE

 

& (논리 AND):

  • 의미: 두 논리값이 모두 TRUE일 때 TRUE를 반환합니다.

 

| (논리 OR):

  • 의미: 두 논리값 중 하나라도 TRUE이면 TRUE를 반환합니다.

 

! (논리 NOT):

  • 의미: 논리값을 반대로 변환합니다. TRUE는 FALSE로, FALSE는 TRUE로 변환합니다.

 

 

 

[참고 도서]

출처 :

이지패스 2024 ADsP 데이터분석 준전문가

🔷 R의 데이터타입

 

⚫문자형 타입

  • character은 문자형 타입
  • 따옴표 혹은 쌍따옴표로 표시
> class('abc')
[1] "character"
> class("abc")
[1] "character"
> class('123')
[1] "character"
> class('TRUE')
[1] "character"

 

 

⚫숫자형 타입

  • 계산이 가능한 데이터를 숫자형 데이터
  • "numeric"
  • Inf 무한대, -Inf 음의 무한대
> class(Inf)
[1] "numeric"
> class(-Inf)
[1] "numeric"
> class(1)
[1] "numeric"
> class(-3)
[1] "numeric"

 

 

⚫논리형 타입

> class(TRUE)
[1] "logical"
> class(FALSE)
[1] "logical"

 

 

⚫NaN, NA, NULL

 

NA (Not Available):

  • 의미: 데이터가 결측되었음을 나타냅니다.
  • 용도: 주로 데이터셋에서 값이 존재하지 않거나 누락된 경우를 표시할 때 사용합니다.
vec <- c(1, 2, NA, 4)

 

 

NaN (Not a Number):

  • 의미: 수학적으로 정의되지 않은 결과를 나타냅니다.
  • 용도: 0을 0으로 나누는 등의 연산 결과로 발생할 수 있습니다.
res <- 0 / 0  # NaN

 

NULL:

  • 의미: 값이 전혀 없음을 나타냅니다.
  • 용도: 리스트나 데이터 프레임에서 값이 없는 상태를 표시하거나, 변수 초기화 등에서 사용됩니다.
val <- NULL

 

 

 

 

[참고 도서]

출처 :

이지패스 2024 ADsP 데이터분석 준전문가