-
[R][Tutorial] R 초보자를 위한 튜토리얼 데이터 타입 및 구조개발 이야기/R 2025. 4. 18. 16:34
R을 너무 오랜만에 쓰는 관계로 간단하게 아래의 튜토리얼을 따라해보려고한다.
https://misdb.github.io/R/R-Tutorial/
index
초보자를 위한 R 튜토리얼 요약 R은 데이터 과학자나 구글, 에어비엔비, 페이스북 등과 같은 주요 기업들이 데이터 분석을 위해 널리 이용하고 있는 프로그램 언어이다. 이 사이트는 초보자를 위
misdb.github.io
R 프로그램
R은 통계계열에서 많이 사용하는 언어로 1993년에 Ross Ihaka와 Robert Gentleman이 개발하였다. R은 광범위한 통계와 그래픽 메소드(method)를 보유하고 있다. 기계학습 알고리즘, 선형 회귀분석, 시계열 분석, 통계적 추론 등과 같은 몇 가지 예를 들 수 있다.
R 데이터 타입
데이터 타입은 복잡하게 생각하지 말고 아래의 3개 numeric, char, logical(bool)이 존재한다고 생각하면되다.
x = 3 # numeric (double) y = "hi" # character z = TRUE # logical확인Vector와 List
Vector의 경우 c()를 이용한다.
v <- c(1, 2, 3) # numeric vector typeof(v) # "double"List의 경우 list()를 이용한다.
lst <- list(1, "a", TRUE) typeof(lst) # "list" str(lst) # List of 3: num 1, chr "a", logi TRUE이때 둘의 차이점은 list의 경우 여러 데이터타입을 담을 수 있다는 것이다.
결국 vector는 np.array랑 비슷하다고 생각하면된다.
범주형 변수 factor
범주형변수의 경우 factor를 이용한다.
Factor의 경우 다음과 같이 사용한다.
gender <- factor(c("male", "female", "male", "female")) gender # [1] male female male female # Levels: female male내부적으로 숫자와 level의 구조로 되어있다.
즉 숫자는 각 데이터들이 어느 범주에 속하는지를 나타내며, levels는 그 숫자들이 무얼 의미하는지를 담는다.
as.integer(gender) # [1] 2 1 2 1 levels(gender) # [1] "female" "male"기본적으로 범주는 order가 없지만 order가 존재하는 경우, order ture옶션을 주면 된다.
grade <- factor(c("B", "A", "C", "B"), levels = c("C", "B", "A"), ordered = TRUE) grade[1] > grade[3] # TRUE (B > C)마지막으로 factor의 값들을 불러올때, 바로 as.numeric을 하면 레벨의 인덱스들을 불러오기에 실제 값을 불러오려면 char로 변환하고 numeric으로 다시 변환하자.
f <- factor(c("100", "200", "300")) as.numeric(f) # [1] 1 2 3 ❌ 잘못된 변환 as.numeric(as.character(f)) # [1] 100 200 300 ✅ 올바른 변환Matrix
Matrix의 경우 다음과 같이 정의한다.
matrix(data, nrow, ncol, byrow = FALSE)이때 인자의 경우
- data: 행렬의 행과 열에 정렬될 요소들의 집합.
- nrow: 행의 수
- ncol: 열의 수
- byrow: 행 우선으로 데이터가 왼쪽에서 오른쪽 방향으로 채워진다. 열 우선으로 행렬의 값을 채우고 싶다면 즉, 데이터가 열 우선으로 위에서 아래로 채워지게 하고 싶다면 byrow = FALSE (기본 값)를 사용한다.이다.
# 2행 3열 행렬 (by column이 기본) m <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3) print(m) [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6행렬에 행추가나 열추가의 경우 rbind(), cbind()를 이용한다.
Dataframe: matrix형태지만 다른 타입이 가능
특징 matrix data.frame 타입 통일 여부 ✅ 모든 원소 같은 타입 (numeric 등) ❌ 열마다 다른 타입 가능 내부 구조 atomic vector + dim 속성 리스트 (각 열이 벡터) 사용 목적 수치 계산, 행렬 연산 통계 분석, 데이터 처리 열 이름 colnames() names() 또는 colnames() 행 이름 rownames() rownames() 출력 형태 깔끔한 배열 테이블 느낌, 열 이름 출력 엑셀 같은 데이터 ❌ ✅ dataframe의 경우 표에서 나타난것처럼 matrix형태지만 열마다 다른타입이 가능하다(이는 기존 python에서 다룬것과 유사)
df <- data.frame( name = c("Alice", "Bob", "Charlie"), age = c(25, 30, 28), student = c(TRUE, FALSE, TRUE) )구조는 다음과 같이 str로 확인가능.
str(df) # 'data.frame': 3 obs. of 3 variables: # $ name : chr "Alice" "Bob" "Charlie" # $ age : num 25 30 28 # $ student: logi TRUE FALSE TRUE주의할 점은 data.frame의 경우 문자열은 자동으로 factor로 변환하는 경우가 있기에 이를 주의하자.
data.frame(name = c("a", "b"), stringsAsFactors = FALSE)데이터프레임에 열을 추가하려면 다음과 같이 $를 이용해 새로운 변수와 함께 추가하자.
# Create a new vector quantity <- c(10, 35, 40, 5) # Add `quantity` to the `df` data frame df$quantity <- quantity df행을 추가하는 경우 rbind()를 이용하자
# 기존 데이터프레임 df <- data.frame(name = c("Alice", "Bob"), age = c(25, 30)) # 추가할 행 (벡터 또는 data.frame 형태) new_row <- data.frame(name = "Charlie", age = 28) # 행 추가 df <- rbind(df, new_row) #or vector로 추가 new_row <- c("David", 22) df <- rbind(df, new_row)반복추가인 경우 다음처럼 list를 받는 do.call를 이용하다.
rows <- list() rows[[1]] <- data.frame(name = "Eve", age = 21) rows[[2]] <- data.frame(name = "Frank", age = 26) df <- rbind(df, do.call(rbind, rows))do.call의 경우 함수 호출을 리스트로 표현된 인자들로 실행하는 함수이다.
'개발 이야기 > R' 카테고리의 다른 글
[R][Tutorial] 데이터프레임 추가정리 (0) 2025.04.24 [R] R 설치 및 VS코드에서 사용하는 법 (0) 2025.04.18