[R] 데이터 개요
Y
Yerim
- R
자료형 | 사용 예 | 비고 |
숫자형 | 1, 2, -4, 12.8 | 정수, 실수 모두 가능 |
문자형 | ‘Tom’, ‘Jane’ | 작은따옴표나 큰따옴표로 묶어서 표현 |
논리형 | TRUE, FALSE | T, F로 줄여서 사용하는 것도 가능 |
특수값 | NULL NA NaN Inf, -Inf | 정의되어 있지않음을 의미, 자료형도 없고 길이도 0 결측값(missing value) 수학적으로 정의가 불가능한 값 (sqrt(-3)) 양의 무한대(Inf), 음의 무한대(-Inf) |
1차원 | 2차원 | n차원 | |
단일형 | 벡터 | 행렬 | 배열 |
다중형 | 리스트 | 데이터 프레임 |
score <- c(68, 95, 83, 76, 90, 80, 85, 91, 82, 70)
mean(score)score.1 <- 68; score.2 <- 95; score.3 <- 83; score.4 <- 76; score.5 <- 90
score.6 <- 80; score.7 <- 85; score.8 <- 91; score.9 <- 82; score.10 <- 70
total <- score.1 + score.2 + score.3 + score.4 + score.5 + score.6 + score.7 + score.8 + score.9 + score.10
avg <- total / 10
avgv1 <- 50:90 # 콜론으로 정수 연속된 벡터를 만들 수 있음
v1
v2 <- c(1, 2, 5, 50:90) # c내부에서 콜론 사용 가능
v2v3 <- seq(1, 101, 3) # 시작, 종료, 간격
v3
v4 <- seq(0.1, 1.0, 0.1)
v4v5 <- rep(1, times=5) # 1을 5번 반복
v5
v6 <- rep(1:5, times=3) # 1, 2, 3, 4, 5를 3번 반복
v6
v7 <- rep(c(1, 5, 9), times=3) # 1, 5, 9를 3번 반복
v7
v8 <- rep(c('a', 'b', 'c'), each = 3) # 각 3번 반복
v8
[1] "a" "a" "a" "b" "b" "b" "c" "c" "c"> absent <- c(8, 2, 0, 4, 1)
> absent
[1] 8 2 0 4 1
> names(absent)
NULL
> names(absent) <- c('Mon', 'Tue', 'Wed', 'Thu', 'Fri') # 값들의 이름을 입력
> absent
Mon Tue Wed Thu Fri
8 2 0 4 1
> names(absent)
[1] "Mon" "Tue" "Wed" "Thu" "Fri"> d <- c(1, 4, 3, 7, 8)
> d[c(1, 3, 5)]
[1] 1 3 8
> d[1:3]
[1] 1 4 3
> d[seq(1, 5, 2)]
[1] 1 3 8
> d[-2]
[1] 1 3 7 8
> d[-c(3:5)]
[1] 1 4> sales <- c(640, 720, 680, 540)
> names(sales) <- c('M1', 'M2', 'M3', 'M4')
> sales
M1 M2 M3 M4
640 720 680 540
> sales[1]
M1
640
> sales['M2']
M2
720
> sales[c('M1', 'M4')]
M1 M4
640 540> v1 <- c(1, 5, 7, 8, 9)
> v1
[1] 1 5 7 8 9
> v1[2] <- 3
> v1[c(1, 5)] <- c(10, 20)
> v1
[1] 10 3 7 8 20
> v1 <- c(100, 200, 300)> d <- c(1, 4, 3, 7, 8)
> 2*d
[1] 2 8 6 14 16
> d-5
[1] -4 -1 -2 2 3
> 3*d + 4
[1] 7 16 13 25 28> x <- c(1, 2, 3, 4)
> y <- c(5, 6, 7, 8)
> x + y
[1] 6 8 10 12
> x * y
[1] 5 12 21 32
> z <- x + y
> z
[1] 6 8 10 12> m <- c(x, y)
> m
[1] 1 2 3 4 5 6 7 8
> n <- c(y, x)
> n
[1] 5 6 7 8 1 2 3 4
> p <- c(x, y, 90, 100)
> p
[1] 1 2 3 4 5 6 7 8 90 100함수명 | 설명 |
sum() | 벡터에 저장된 값들의 합 |
mean() | 벡터에 저장된 값들의 평균 |
median() | 벡터에 저장된 값들의 중앙값 |
max(), min() | 벡터에 저장된 값들의 최댓값, 최솟값 |
var() | 벡터에 저장된 값들의 분산 |
sd() | 벡터에 저장된 값들의 표준편차 |
sort() | 벡터에 저장된 값들의 정렬(오름차순이 기본) |
range() | 벡터에 저장된 값들의 범위(최솟값, 최댓값) |
length() | 벡터에 저장된 값들의 개수 (벡터의 길이) |
> d <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
> sum(d)
[1] 55
> sum(2*d)
[1] 110
> length(d)
[1] 10
> mean(d[1:5])
[1] 3
> max(d)
[1] 10
> min(d)
[1] 1
> sort(d)
[1] 1 2 3 4 5 6 7 8 9 10
> sort(d, decreasing=FALSE)
[1] 1 2 3 4 5 6 7 8 9 10
> sort(d, decreasing=TRUE)
[1] 10 9 8 7 6 5 4 3 2 1
>
> v1 <- median(d)
> v1
[1] 5.5
> v2 <- sum(d)/length(d)
> v2
[1] 5.5함수명 | 사용 예 | 설명 |
< | A < B | B가 A보다 크면 TRUE |
<= | A <= B | B가 A보다 크거나 같으면 TRUE |
> | A > B | A가 B보다 크면 TRUE |
>= | A >= B | A가 B보다 크거나 같으면 TRUE |
== | A == B | A와 B가 같으면 TRUE |
!= | A != B | A와 B가 같으면 TRUE |
| | A | B | A 또는 B 어느 한쪽이라도 TRUE이면 TRUE |
& | A & B | A와 B모두 TRUE일 때만 TRUE |
# 코드 4-6
> d <- 1:9
> d >= 5
[1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE
[8] TRUE TRUE
> d[d>5]
[1] 6 7 8 9
> sum(d>5)
[1] 4
> sum(d[d>5])
[1] 30
> d==5
[1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE
[8] FALSE FALSE
>
> condi <- d > 5 & d < 8
> d[condi]
[1] 6 7bt <- c('A', 'B', 'B', 'O', 'AB', 'A') # 문자형 벡터 bt정의
bt.new <- factor(bt) # 팩터 bt.new 정의
bt # 벡터 bt의 내용 출력
bt.new # 벡터 bt.new의 내용 출력
bt[5] # 벡터 bt의 5번째 값 출력
levels(bt.new) # 팩터에 저장된 값의 종류를 출력
as.integer(bt.new) # 팩터의 문자값을 숫자로 바꾸어 출력
bt.new[7] <- 'B' # 팩터의 bt.new의 7번째에 'B'저장
bt.new[8] <- 'C' # 팩터의 bt.new의 8번째에 'C'저장
bt.new # 팩터 bt.new의 내용 출h.list <- c('balling', 'tennis', 'ski') # 취미를 벡터에 저장
person <- list(name='Tom', age=25, student=TRUE, hobby=h.list) # 리스트 생성
person # 리스트에 저장된 내용 모두 출력
person[[1]] # 리스트의 첫 번째 값 출력
person$name # 리스트에서 값의 이름이 name인 값을 출력
person[[4]] # 리스트의 네 번째 값을 출력# 매트릭스 생성
x <- 1:4
y <- 5:8
z <- matrix(1:20, nrow=4, ncol=5, byrow=T)
m1 <- cbind(x, y)
m2 <- rbind(x, y)# 매트릭스 값 추출
z[행,열] # 매트리스 값 추출
z[1, c(1, 2, 4)] # 1행의 값 중 1, 2, 4열
z[1, 1:4] # 1행의 값 중 1, 2, 3, 4열# 행과 열에 이름 붙이기
score <- matrix(c(90, 85, 69, 78, 85, 96, 49, 95,90, 80, 70, 60), nrow=4)
rownames(score) <- c('John', 'Tom', 'Mark', 'Jane')
colnames(score) <- c('English', 'Math', 'Science')# 데이터프레임 만들기
city <- c("Seoul", "Tokyo", "Washington")
rank <- c(1, 3, 2)
city.info <- data.frame(city, rank)
city.info# iris 데이터셋
iris
iris[, c(1:2)]
iris[, c(1, 3, 5)]
iris[, c("Sepal.Length", "Species")]
iris[1:5, ]
iris[1:5 c(1, 3)]열 이름 | 의미 | 자료형 |
Sepal.Length | 꽃받침의 길이 | 숫자형 |
Sepal.Width | 꽃받침의 폭 | 숫자형 |
Petal.Length | 꽃잎의 길이 | 숫자형 |
Petal.Width | 꽃잎의 폭 | 숫자형 |
Species | 붓꽃의 품종 | 문자형(팩터) |
dim(iris) # 행과 열 개수
nrow(iris) # 행 개수
ncol(iris) # 열 개수
colnames(iris) # 열 이름 (names()와 동일)
head(iris) # 데이터셋의 앞부분 일부
tail(iris) # 데이터셋의 뒷부분
str(iris) # 데이터셋 요약 정보
iris[, 5] # 품종 데이터 보기
levels(iris[, 5]) # 품종 종류 (중복제거)
table(iris[, "Species"]) # 품종 종류별 행의 개수# 합계, 평균
colSums(iris, [, -5]) # 열별 합계
colMeans(iris, [, -5]) # 열별 평균
rowSums(iris, [, -5]) # 행별 합계
rowMeans(iris, [, -5]) # 행별 평균
# 행렬전환 (전치행렬)
t(z)
# 조건에 맞는 행, 열 값 추출
IR.1 <- subset(iris, Species == 'setosa')
IR.2 <- subset(iris, Sepal.Length > 5.0 & Speal.Width > 4.0)
# 산술연산
a + b
2 * aclass(iris) # iris 데이터셋의 자료구조 확인
class(state.x77) # state.x77 데이터셋의 자료구조 확인
is.matrix(iris) # 데이터셋이 매트릭스인지 확인하는 함수
is.data.frame(iris) # 데이터셋이 데이터프레임인지 확인하는 함수
is.matrix(state.x77)
is.data.frame(state.x77)
# 매트릭스 -> 데이터프레임
st <- data.frame(state.x77)
# 데이터프레임 -> 매트릭스
iris.m <- as.matrix(iris[, 1:4])# 데이터프레임, 매트릭스 모두 가능
iris[, "Species"]
iris[, 5]
# 데이터프레임만 가능
iris["Species"]
iris[5]
iris$Species# 데이터 입력하고 입력된 데이터 내용 확인
age <- c(28, 17, 35, 46, 23, 67, 30, 50)
age
# 가장 젊은 사람과 가장 나이든 사람의 나이 데이터를 출력
young <- min(age)
old <- max(age)
# 처리 결과 출력
cat('가장 젋은 사람의 나이는 ', young, '이고, ',
'가장 나이든 사람의 나이는 ', old, '입니다. \n')install.packages('svDialogs') # 패키지 설치
library(svDialogs)
user.input <- dlgInput('Input income')$res
user.input
income <- as.numeric(user.input) # 문자열을 숫자로
income
tax <- income * 0.05 # 세금 계산
cat('세금: ', tax)함수 | 사용상의 특징 |
print() | • 하나의 값을 출력할 때 • 데이터프레임과 같은 2차원 자료구조를 출력할 때 • 출력 후 자동 줄바꿈 |
cat() | • 여러 개의 값을 연결해서 출력할 때 (벡터는 출력되나 2차원 자료구조는 출력되지 않음) • 출력 후 줄바꿈을 하려면 ‘\n’ 필요 |
x <- 26
y <- '입니다'
z <- c(10, 20, 30, 40)
print(x) # 하나의 값 출력
print(y) # 하나의 값 출력
print(z) # 벡터 출력
print(iris[1:5, ]) # 데이터프레임 출력
print(x, y) # 두 개의 값 출려 (에러 발생)x <- 26
y <- '입니다'
z <- c(10, 20, 30, 40)
cat(x, '\n') # 하나의 값 출력
cat(y, '\n') # 하나의 값 출력
cat(z, '\n') # 벡터 출력
cat(x, y, '\n') # 두 값을 연결하여 출력
cat(iris[1:5], '\n') # 데이터프레임 출력 (에러 발생)getwd()
setwd('C:/Rworks')
getwd()setwd('C:/Rworks') # 작업 폴더 지정
air <- read.csv('airquality.csv', header=T) # .csv 파일 읽기
head(air)
class(air) # air의 자료구조 확인
setwd('C:/Rworks') # 작업 폴더 지정
# setosa 품종 데이터만 추출
my.iris <- subset(iris, Species=='setosa')
# .csv 파일에 저장하기
write.csv(my.iris, 'my_iris.csv', row.names=F)install.packages('xlsx') # 패키지 설치하기
library(xlsx) # 패키지 불러오기
# .xlsx 파일 읽기
air <- read.xlsx('C:/Rworks/airquality.xlsx', header=T, sheetIndex=1)
head(air)library(xlsx) # 패키지 불러오기
my.iris <- subset(iris, Species=='setosa') # setosa 품종 데이터만 추출
write.xlsx(my.iris, 'my_iris.xlx', row.names=F) # 파일에 저장하기setwd('C:/Rworks') # 작업 폴더 지정
print('Begin work') # 화면으로 출력
a <- 10; b <- 20
sink('result.txt', append=T) # 파일로 출력 시작
cat('a+b = ', a+b, '\n')
sink() # 파일로 출력 정지
cat('hello world \n') # 화면으로 출력
sink('result.txt', append=T) # 파일로 출력 시작
cat('a*b=', a*b, '\n')
sink() # 파일로 출력 정지
print('End work') # 화면으로 출력setwd('C:/Rworks') # 작업 폴더 지정
air <- read.table('airquality.txt', header=T, sep=' ') # 파일 읽기
head(air) # 내용 확인