Chapter 3 R basics
3.1 vector matirx list
3.1.1 오브젝트 (objects)
값(value)을 변수(variable)에 대입시키는 방법이다. 이를 이용해서 변수를 통한 연산이 가능하다.
<-1
a <-2
b <- -1
c
*b+c a
## [1] 1
값에는 숫자 외에도 여러 종류가 가능하다. 대표적인 것이 숫자(numeric), 문자(character), 논리값(logical) 값을 대입시킬 수 있다.
<- 43
student_a_age <- '윤진하'
student_a_name <- FALSE student_a_pass
즉, 한변수에 하나의 값을 제공하는 0차원적 개념이다.
3.1.2 백터 (Vectors), 팩터 (factors)
백터는 한 변수에 여러개의 값이 존재하는 경우다. 이때 c()
를 사용하고 c
는 concatenate의 C이다. 결측값 (missing value) 는 NA
나 NAN
으로 표시된다. 백터에는 순서가 존재하므로, my_vector[i]
를 이용하여 i
번째 값을 추출할 수있다.
<- c(24, 31, 40, 16)
student_all_age student_all_age
## [1] 24 31 40 16
각각 아래의 명령에 따라 어떤 값이 나타날지 예상해보자.
1] student_all_age[
## [1] 24
1:2] student_all_age[
## [1] 24 31
c(1, 3)] student_all_age[
## [1] 24 40
-4] student_all_age[
## [1] 24 31 40
숫자로된 백터는 기본 함수를 사용하여 요약값을 나타낼 수 있다. max(), min(), range(), length(), sum(), mean(), prod(), sd(), var(), sort()
등이 있다.
max(student_all_age)
## [1] 40
length(student_all_age)
## [1] 4
<- c('영희', '철수', '은미', '재석')
student_all_name summary(student_all_name)
## Length Class Mode
## 4 character character
<- c('group1','group2', 'group1', 'group2' )
student_all_class summary(student_all_class)
## Length Class Mode
## 4 character character
여기서 student_all_class 는 group
이 1
과2
로 나뉘어 있는 것을 볼 수 있다. 이러한 개념은 팩터로 살펴볼 수 있다. 컴퓨터에게 sutdent_all_class
가 팩터라는 것을 알려주자.
<-factor(c('group1','group2', 'group1', 'group2' ))
student_all_group summary(student_all_group)
## group1 group2
## 2 2
group이 있으니 몇가지 쉬운 이용방법이 생겼다.
tapply(student_all_age, student_all_group, mean)
## group1 group2
## 32.0 23.5
미리 이야기 하지만 *apply에 익수해져야한다. 이제, 1차원의 데이터 형식을 보았다. 메트릭스로 넘어 2차원의 자료를 살펴 보자
3.1.3 매트릭스 (Matrix), 데이터프래임 (data frame), 리스트 (list)
우리가 흔히 보았던 엑셀이나 표 형식의 데이터이다. 메트릭스는 행(row)와 열(column)로 구성되어 있고 백터 변수를 행을 기준으로 나열 할지, 열을 기준으로 할지 여부로 구성할 수 있다.
= matrix(
A1 c(1, 2, 3, 4, 5, 6, 7, 8), # 값
nrow=2, # 행 갯수
ncol=4, # 열 갯수
byrow = TRUE) # 행을 기준으로 순서대로
# 출력 A1
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
그렇다면 똑 같이 1, 2, 3, 4, 5, 6, 7, 8를 이용해서 아래의 행렬을 만들어보자
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
## [3,] 5 6
## [4,] 7 8
행렬이 행(column)에 같은 성질의 값 들로 이루어져 있다면 데이터프래임은 좀더 자유롭다고 볼 수 있다.
<- data.frame(
dspub_class 'name' = student_all_name,
'age' = student_all_age,
'group' = student_all_group
) dspub_class
## name age group
## 1 영희 24 group1
## 2 철수 31 group2
## 3 은미 40 group1
## 4 재석 16 group2
데이터프래임 부터는 tidyverse
패키지를 사용해서 몇가지를 보겠다. %>%
는 pipe로 앞에 있는 것을 가지도 뒤에 명령을 하자는 조사 같은 것으로 이해하자. mutate
는 가로 안에 있는 명령을 수행해서 새로운 변수를 만들라는 것이다.
library(tidyverse)
%>%
dspub_class group_by(group) %>%
summarize(avg = mean(age))
## # A tibble: 2 × 2
## group avg
## <fct> <dbl>
## 1 group1 32
## 2 group2 23.5
과제가 있습니다. 과제는 DSpub
내 group1 과 gropu2가 몇개인지와 최고 나이를 맞추는 것이다. 영희/철수에게 첫번째 숙제를, 은미/재석에게 두번째 숙제를 냈다. 과제를 받았다.
<- dspub_class %>%
homework1 group_by(group) %>%
mutate(avg_age = mean(age))
<- dspub_class %>%
homework2 group_by(group) %>%
mutate(max_age = max(age))
homework1
## # A tibble: 4 × 4
## # Groups: group [2]
## name age group avg_age
## <chr> <dbl> <fct> <dbl>
## 1 영희 24 group1 32
## 2 철수 31 group2 23.5
## 3 은미 40 group1 32
## 4 재석 16 group2 23.5
homework2
## # A tibble: 4 × 4
## # Groups: group [2]
## name age group max_age
## <chr> <dbl> <fct> <dbl>
## 1 영희 24 group1 40
## 2 철수 31 group2 31
## 3 은미 40 group1 40
## 4 재석 16 group2 31
이것을 어딘가에 저장하고 싶다, 이때 list를 사용할 수 있다.
<-
second_week_dspub list(
student_all_age,
student_all_class,
student_all_group,
student_all_name,
dspub_class,
homework1,
homework2
) second_week_dspub
## [[1]]
## [1] 24 31 40 16
##
## [[2]]
## [1] "group1" "group2" "group1" "group2"
##
## [[3]]
## [1] group1 group2 group1 group2
## Levels: group1 group2
##
## [[4]]
## [1] "영희" "철수" "은미" "재석"
##
## [[5]]
## name age group
## 1 영희 24 group1
## 2 철수 31 group2
## 3 은미 40 group1
## 4 재석 16 group2
##
## [[6]]
## # A tibble: 4 × 4
## # Groups: group [2]
## name age group avg_age
## <chr> <dbl> <fct> <dbl>
## 1 영희 24 group1 32
## 2 철수 31 group2 23.5
## 3 은미 40 group1 32
## 4 재석 16 group2 23.5
##
## [[7]]
## # A tibble: 4 × 4
## # Groups: group [2]
## name age group max_age
## <chr> <dbl> <fct> <dbl>
## 1 영희 24 group1 40
## 2 철수 31 group2 31
## 3 은미 40 group1 40
## 4 재석 16 group2 31
숙제 과제만 뽑아 내서 보고 싶다면, 해당 list만 출력하면 된다. 즉 list에는 거의 모든 자료가 이질성을 갖고 있더라도 저장된다.
7]] second_week_dspub[[
## # A tibble: 4 × 4
## # Groups: group [2]
## name age group max_age
## <chr> <dbl> <fct> <dbl>
## 1 영희 24 group1 40
## 2 철수 31 group2 31
## 3 은미 40 group1 40
## 4 재석 16 group2 31
3.2 데이터 생성 저장
3.2.1 built-in data sets
R에서 기본적으로 제공되는 데이터는 data()
로 살펴볼 수 있다.
data()
이중 가장 유명한 데이터중 하나인 iris
를 사용해 보자
data('iris')
head(iris)
## 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
## 6 5.4 3.9 1.7 0.4 setosa
잎의 길이와 넓이에 대한 상관관계를 그림으로 나타내 보자. 자세한 것은 시각화(visualization) 파트에서 다루겠다.
plot(iris$Sepal.Length, iris$Sepal.Width)
저번시간에 만들어 놓은 data
폴더에 iris를 csv 파일로 저장해 보자.
library(tidyverse)
write_csv(iris, "data/my_iris.csv")