# 주석을 이렇게 작성 가능함
# 멀티 주석도 가능함 RStudio에서 전체 선택 후
# Ctrl+Shift+C로 가능함
#변수 생성
firstData01 <- c(1:5)
#더하기 빼기 예제
10+22
## [1] 32
32-9
## [1] 23
9+(32-7)
## [1] 34
#곱하기 & 나누기
55*8
## [1] 440
55/8
## [1] 6.875
#나머지
88%%7
## [1] 4
#제곱
3^3
## [1] 27
#날짜와 시간
Sys.Date()
## [1] "2016-04-25"
Sys.time()
## [1] "2016-04-25 01:24:40 KST"
date()
## [1] "Mon Apr 25 01:24:40 2016"
as.Date(Sys.Date()-3,"%Y%m%d") #지정한 데이터 변경 가능함
## [1] "2016-04-22"
# 벡터
inStr01<-9
inStr02<-9:13
inStr02<-c(inStr02,900:902)
inStr03<-seq(1, 9, by = 2)
inStr02
## [1] 9 10 11 12 13 900 901 902
# 벡터 + Factors
gender<-c("남자","여자","여자","남자","여자")
gender<-factor(gender)
gender
## [1] 남자 여자 여자 남자 여자
## Levels: 남자 여자
# DataFrame 우리가 가장 많이 다룰 데이터 타입
inData01<-data.frame(iris)
str(inData01)
## '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 ...
가장 많이 활용한다고 하는 이 구조에 대해서 보다 상세히 알아 보고 넘어가자
해당 타입은 Excel의 Sheet와 유사한 구조이며, 각 Column은 다른 구조를 가질수 있다
# DataFrame 4행 조회
inData01[4,]
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 4 4.6 3.1 1.5 0.2 setosa
# DataFrame 3열 조회
inData01[,3]
## [1] 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 1.5 1.6 1.4 1.1 1.2 1.5 1.3
## [18] 1.4 1.7 1.5 1.7 1.5 1.0 1.7 1.9 1.6 1.6 1.5 1.4 1.6 1.6 1.5 1.5 1.4
## [35] 1.5 1.2 1.3 1.4 1.3 1.5 1.3 1.3 1.3 1.6 1.9 1.4 1.6 1.4 1.5 1.4 4.7
## [52] 4.5 4.9 4.0 4.6 4.5 4.7 3.3 4.6 3.9 3.5 4.2 4.0 4.7 3.6 4.4 4.5 4.1
## [69] 4.5 3.9 4.8 4.0 4.9 4.7 4.3 4.4 4.8 5.0 4.5 3.5 3.8 3.7 3.9 5.1 4.5
## [86] 4.5 4.7 4.4 4.1 4.0 4.4 4.6 4.0 3.3 4.2 4.2 4.2 4.3 3.0 4.1 6.0 5.1
## [103] 5.9 5.6 5.8 6.6 4.5 6.3 5.8 6.1 5.1 5.3 5.5 5.0 5.1 5.3 5.5 6.7 6.9
## [120] 5.0 5.7 4.9 6.7 4.9 5.7 6.0 4.8 4.9 5.6 5.8 6.1 6.4 5.6 5.1 5.6 6.1
## [137] 5.6 5.5 4.8 5.4 5.6 5.1 5.1 5.9 5.7 5.2 5.0 5.2 5.4 5.1
특정행을 몇개 조회함 (5개)
inData01[1:5,]
## 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
특정행에 대해서 값이 일치하는 행을 조회함
#Head()는 데이터 건수가 많아서 상위 몇개만 조회 목적으로 사용함
head(inData01[inData01$Species=="setosa",])
## 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
특정행에 조건에 대해서 맞으면 조회함
inData01[which(inData01$Species=="setosa" & inData01$Petal.Width > 0.3),]
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 6 5.4 3.9 1.7 0.4 setosa
## 16 5.7 4.4 1.5 0.4 setosa
## 17 5.4 3.9 1.3 0.4 setosa
## 22 5.1 3.7 1.5 0.4 setosa
## 24 5.1 3.3 1.7 0.5 setosa
## 27 5.0 3.4 1.6 0.4 setosa
## 32 5.4 3.4 1.5 0.4 setosa
## 44 5.0 3.5 1.6 0.6 setosa
## 45 5.1 3.8 1.9 0.4 setosa
Subset 데이터 조회 Function 사용 Syntax : subset([Data], 조건, select=c([Output]))
subset(inData01, Species=="setosa" & Petal.Width > 0.3, select=c(Sepal.Length:Species))
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 6 5.4 3.9 1.7 0.4 setosa
## 16 5.7 4.4 1.5 0.4 setosa
## 17 5.4 3.9 1.3 0.4 setosa
## 22 5.1 3.7 1.5 0.4 setosa
## 24 5.1 3.3 1.7 0.5 setosa
## 27 5.0 3.4 1.6 0.4 setosa
## 32 5.4 3.4 1.5 0.4 setosa
## 44 5.0 3.5 1.6 0.6 setosa
## 45 5.1 3.8 1.9 0.4 setosa
램덤 데이터 조회
inData01[sample(1:nrow(inData01), 3, replace = FALSE),]
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 128 6.1 3.0 4.9 1.8 virginica
## 120 6.0 2.2 5.0 1.5 virginica
## 140 6.9 3.1 5.4 2.1 virginica
데이터 품질관리로 결측치에 대한 값 처리에 대해서는 아래와 같이 처리함
y <- c(1,2,3,NA)
is.na(y)
## [1] FALSE FALSE FALSE TRUE
데이터프레임 전체에 몇개의 결측지가 존재하는지 확인
inData02<-inData01
inData02[which(inData02$Species=="setosa"&inData01$Petal.Width > 0.3),]<-NA
head(is.na(inData02))
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## [1,] FALSE FALSE FALSE FALSE FALSE
## [2,] FALSE FALSE FALSE FALSE FALSE
## [3,] FALSE FALSE FALSE FALSE FALSE
## [4,] FALSE FALSE FALSE FALSE FALSE
## [5,] FALSE FALSE FALSE FALSE FALSE
## [6,] TRUE TRUE TRUE TRUE TRUE
colSums(is.na(inData02))
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 9 9 9 9 9
결측값 모두 조회
inData02[!complete.cases(inData02),]
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 6 NA NA NA NA <NA>
## 16 NA NA NA NA <NA>
## 17 NA NA NA NA <NA>
## 22 NA NA NA NA <NA>
## 24 NA NA NA NA <NA>
## 27 NA NA NA NA <NA>
## 32 NA NA NA NA <NA>
## 44 NA NA NA NA <NA>
## 45 NA NA NA NA <NA>
결측치만 빼고 다시 데이터 생성
inData03<-na.omit(inData02)
colSums(is.na(inData03))
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 0 0 0 0 0
데이터 정렬에 대해서 알아보자
Order는 정렬될 데이터의 위치를 알려줌
즉 14번, 9번이 데이터상 첫번째, 두번째로 정렬 되어야 한다는 것임
order(inData01$Sepal.Length)
## [1] 14 9 39 43 42 4 7 23 48 3 30 12 13 25 31 46 2
## [18] 10 35 38 58 107 5 8 26 27 36 41 44 50 61 94 1 18
## [35] 20 22 24 40 45 47 99 28 29 33 60 49 6 11 17 21 32
## [52] 85 34 37 54 81 82 90 91 65 67 70 89 95 122 16 19 56
## [69] 80 96 97 100 114 15 68 83 93 102 115 143 62 71 150 63 79
## [86] 84 86 120 139 64 72 74 92 128 135 69 98 127 149 57 73 88
## [103] 101 104 124 134 137 147 52 75 112 116 129 133 138 55 105 111 117
## [120] 148 59 76 66 78 87 109 125 141 145 146 77 113 144 53 121 140
## [137] 142 51 103 110 126 130 108 131 106 118 119 123 136 132
정렬순대로 데이터 조회
#Head()는 데이터 건수가 많아서 상위 몇개만 조회 목적으로 사용함
head(inData01[order(inData01$Sepal.Length),])
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 14 4.3 3.0 1.1 0.1 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 39 4.4 3.0 1.3 0.2 setosa
## 43 4.4 3.2 1.3 0.2 setosa
## 42 4.5 2.3 1.3 0.3 setosa
## 4 4.6 3.1 1.5 0.2 setosa
응용1. 열명을 정렬도 가능함
head(subset(inData01, Species=="setosa" , select=c(1:5)))
## 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
head(subset(inData01, Species=="setosa" , select=c(order(colnames(inData01)))))
## Petal.Length Petal.Width Sepal.Length Sepal.Width Species
## 1 1.4 0.2 5.1 3.5 setosa
## 2 1.4 0.2 4.9 3.0 setosa
## 3 1.3 0.2 4.7 3.2 setosa
## 4 1.5 0.2 4.6 3.1 setosa
## 5 1.4 0.2 5.0 3.6 setosa
## 6 1.7 0.4 5.4 3.9 setosa
str(inData01)
## '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 ...
summary(inData01)
## 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
##
##
##
plot(inData01)
boxplot(data=inData01, Sepal.Length~Species)
quantile(inData01$ Sepal.Length)
## 0% 25% 50% 75% 100%
## 4.3 5.1 5.8 6.4 7.9
데이터 예제로 도움이 되었으면 합니다.
모두가 R를 잘 사용하는 그날까지..
Thanks & best regards