강의 및 세미나 자료/R
R 핵심만 배우기 #3 - 데이터 프레임(data.frame) 첫번째
- -
R 핵심만 배우기 #3 - 데이터 프레임(data.frame) 첫번째
호돌2
2017년 10월 29일
(2017년 업데이트 하면서, R(3.4.2버전), R Notebook 으로 작성되었습니다.) > data.frame 다루기
data.frame에 대해 알아봅시다
데이터 프레임은 R의 핵심적인 자료구조로서,
쉽게 말해 엑셀과 같이 숫자, 문자 등 다양한 데이터를 하나의 테이블에 담을 수 있는 자료구조입니다.
이를 잘 활용하면 엑셀의 기능들을 R에서도 자유자제로 사용할 수 있습니다.
먼저 데이터 데이터 프레임을 생성하는 방법은 다음과 같습니다.
df <- data.frame(col1=c('a','b','c','d','e') , col2=c(2, 4, 6, 8, 10))
df
## col1 col2
## 1 a 2
## 2 b 4
## 3 c 6
## 4 d 8
## 5 e 10
생성한 데이터 프레임의 구조는 아래와 같이 파악할 수 있습니다.
#dataframe의 구조(structure) 파악하기
?str()
head(df)
## col1 col2
## 1 a 2
## 2 b 4
## 3 c 6
## 4 d 8
## 5 e 10
str(df)
## 'data.frame': 5 obs. of 2 variables:
## $ col1: Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5
## $ col2: num 2 4 6 8 10
summary(df)
## col1 col2
## a:1 Min. : 2
## b:1 1st Qu.: 4
## c:1 Median : 6
## d:1 Mean : 6
## e:1 3rd Qu.: 8
## Max. :10
#R에 기본 내장되어 있는 iris 데이터셋을 이용해 보면,
str(iris)
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
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
summary(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
- data.frame의 row, column 접근하기
df <- data.frame(col1=c('a','b','c','d','e') , col2=c(2, 4, 6, 8, 10))
df$col1 #column이름으로 접근하기
## [1] a b c d e
## Levels: a b c d e
df[1,] #첫번째 row의 모든 column
## col1 col2
## 1 a 2
df[,2] #2번째 column의 모든 row
## [1] 2 4 6 8 10
- column 추가하기
df <- data.frame(col1=c('a','b','c','d','e') , col2=c(2, 4, 6, 8, 10))
df$col3 <- c(1,2,3,4,5)
df
## col1 col2 col3
## 1 a 2 1
## 2 b 4 2
## 3 c 6 3
## 4 d 8 4
## 5 e 10 5
Quiz
R에 기본 내장되어 있는 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
- 첫번째, 3번째 column을 선택하시오
## 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
## 6 5.4 1.7
- 3번째 column을 제거하시오
## Sepal.Length Sepal.Width Petal.Width Species
## 1 5.1 3.5 0.2 setosa
## 2 4.9 3.0 0.2 setosa
## 3 4.7 3.2 0.2 setosa
## 4 4.6 3.1 0.2 setosa
## 5 5.0 3.6 0.2 setosa
## 6 5.4 3.9 0.4 setosa
- 각 row의 Sepal.Length와 Sepal.Width의 값을 더하여 Sepal.Sum이라는 column을 추가하세요
## Sepal.Length Sepal.Width Petal.Width Species Sepal.Sum
## 1 5.1 3.5 0.2 setosa 8.6
## 2 4.9 3.0 0.2 setosa 7.9
## 3 4.7 3.2 0.2 setosa 7.9
## 4 4.6 3.1 0.2 setosa 7.7
## 5 5.0 3.6 0.2 setosa 8.6
## 6 5.4 3.9 0.4 setosa 9.3
** 참고) df[1,] 과 df[1, ,drop=T]의 차이는?
class(df[1,])
## [1] "data.frame"
class(df[1, ,drop=T])
## [1] "list"
dataframe 이름 바꾸기
df <- data.frame(a=1:3,b=4:6,c=7:9)
colnames(df) <- c('열1','열2','열3')
rownames(df) <- c('행1','행2','행3')
타입변환에 대해 알아봅시다
- 데이터 타입’만’ 알고 싶을때 : class 함수
class(c(1,2))
## [1] "numeric"
class(matrix(c(1,2)))
## [1] "matrix"
class(list(1,2))
## [1] "list"
class(data.frame(1,2))
## [1] "data.frame"
- 데이터 타입과 데이터 모양에 대한 추가정보까지 : str 함수
str(c(1,2))
## num [1:2] 1 2
str(matrix(c(1,2)))
## num [1:2, 1] 1 2
str(list(c(1,2)))
## List of 1
## $ : num [1:2] 1 2
str(data.frame(1,2))
## 'data.frame': 1 obs. of 2 variables:
## $ X1: num 1
## $ X2: num 2
- 데이터 타입을 맞는지 틀린지 TRUE/FALSE를 반환하는 함수
is.numeric(c(1,2,3))
## [1] TRUE
is.numeric(c('a','b','c'))
## [1] FALSE
is.matrix(matrix(c(1,2)))
## [1] TRUE
자료 구조간의 변환 방법
#list를 vector로
lst <- list(1,2,3,4)
unlist(lst)
## [1] 1 2 3 4
#list를 dataframe으로
lst <- list(x=c(1,2),y=c(3,4))
data.frame(lst)
## x y
## 1 1 3
## 2 2 4
#matrix를 데이터 프레임으로
mat <- matrix(c(1,2,3,4), ncol=2)
data.frame(mat)
## X1 X2
## 1 1 3
## 2 2 4
#벡터를 factor로, factor를 벡터로
x <- c("m","f")
as.factor(x) #문자열을 Factor로
## [1] m f
## Levels: f m
as.numeric(as.factor(x)) #Factor를 다시 숫자형으로
## [1] 2 1
Quiz
- 남, 여를 1,2 로 바꿔보자
vec <- c('남','여','남','남','여')
## [1] 1 2 1 1 2
- 참고 : 남, 여를 2,1 로 바꾸면?
as.numeric(factor(vec, levels=c('여','남')))
## [1] 2 1 2 2 1
실습 과제
첨부한 파일을 다운 받고 R에서 불러오세요.
data_csv <- read.csv('toyota_sample.csv')
head(data_csv)
str(data_csv)
data_csv의 Price의 평균을 계산하여라
data_csv의 Age 의 표준편차을 계산하여라
data_csv의 3~5번째 row 선택하세요
'강의 및 세미나 자료 > R' 카테고리의 다른 글
R로 크롤링하기 - 보배드림 예제 (20) | 2016.08.07 |
---|---|
R 핵심만 배우기 #5 - dplyr (1) | 2016.08.04 |
R 핵심만 배우기 #4 - 데이터 프레임 2번째 (5) | 2016.08.03 |
R 핵심만 배우기 #2 - 리스트, 메트릭스, 배열 (0) | 2016.08.01 |
R 핵심만 배우기 #1 - 스칼라, 요인, 벡터 (2) | 2016.08.01 |
Contents
소중한 공감 감사합니다