[R 기초] 배열, 행렬, 요인, 데이터프레임, 리스트, 함수적용
#array #matrix #cbind #rbind #apply #factor #tapply #data.frame #with #subset #na.omit #list #lapply #sapply
배열 Array 생성하기 array() 같은타입의 벡터 모임
array(data = NA, dim= length(data), dimnames = NULL)
dim : 차원 생성
dimnames : 차원별 이름
예시)
> arrname = list(c("row1","row2"),c("col1","col2","col3","col4"))
> arr<-array(1:3, c(2,4),dimnames = arrname)
> arr
col1 col2 col3 col4
row1 1 3 2 1
row2 2 1 3 2
> arr[1,]
col1 col2 col3 col4
1 3 2 1
> arr["row1",]
col1 col2 col3 col4
1 3 2 1
행렬 Matrix 생성하기 matrix() 2차원배열
matrix(data = NA, nrow = 1, ncol =1, byrow = F, dimnames = NULL)
nrow : 행 요소의 개수
ncol : 열 요소의 개수
byrow : 데이터를 행 단위로 배치할 지 여부
dimnames : 행과 열의 이름 list
예시)
> temp<- 1:12
> temp
[1] 1 2 3 4 5 6 7 8 9 10 11 12
> m <-matrix(temp,nrow = 3)
> m
#nrow =3 과 ncol=4는 동일한 결과
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> m1 <-matrix(temp,nrow =3, byrow=T)
#row부터 채워나간다 기본은 F col부터 채워나감
> m1
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
행렬 합치기 cbind(), rbind()
> v1<-1:4
> v2<-5:8
> v3<-9:12
> cbind(v1,v2,v3)
#열별 각 벡터 채움
v1 v2 v3
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
> rbind(v1,v2,v3)
#행별 각 벡터 채움
[,1] [,2] [,3] [,4]
v1 1 2 3 4
v2 5 6 7 8
v3 9 10 11 12
함수적용 apply() 행렬 자료에 대해 함수 적용
apply(X, MARGIN, FUN, ...)
X : 적용할 배열 또는 행렬
MARGIN : 함수를 적용할 차원, 행렬의 경우 1이면 행별, 2이면 열별로 적용
FUN : 적용할 함수
예시)
> v1<-1:4
> v2<-5:8
> v3<-9:12
> m2<-cbind(v1,v2,v3)
> apply(m2,1,sum)
[1] 15 18 21 24
> apply(m2,2,sum)
v1 v2 v3
10 26 42
> apply(m2,1,mean)
[1] 5 6 7 8
> apply(m2,2,mean)
v1 v2 v3
2.5 6.5 10.5
요인 Factor 범주형 자료 factor()
factor(X=character(), levels, labels=levels, exclude=NA, ordered=is.ordered(x), nmax=NA)
X : 요인으로 만들 벡터
levels : 주어진 데이터 중 요인으로 할 데이터 지정
labels : 요인 이름
exclude : 요인으로 사용하지 않을 값 지정
ordered : 순서여부 (T/F) 순서있는 범주의 경우 사용
nmax : 최대 level의 수 (즉, 최대 요인수)
예시)
> x<-1:5
> x
[1] 1 2 3 4 5
> factor(x,levels=c(1,2,3,4))
[1] 1 2 3 4 <NA>
Levels: 1 2 3 4
> factor(x,levels=c(1,2,3,4), exclude=c(1,2))
[1] <NA> <NA> 3 4 <NA>
Levels: 3 4
> factor(x,levels=c(1,2,3,4),ordered = T)
[1] 1 2 3 4 <NA>
Levels: 1 < 2 < 3 < 4
> factor(x)
[1] 1 2 3 4 5
Levels: 1 2 3 4 5
함수적용 tapply() table형태의 자료에 대해 함수 적용
tapply(X, INDEX, FUN=NULL, ... simplify=T)
X: 집계할 자료 벡터
INDEX : X를 집계할 요인이나 요인의 리스트
FUN : 집계에 사용할 함수
simplify : 결과 형태 (T/F) T:스칼라로 F:리스트형의 배열로 반환
예시)
> score<-c(92,90,82,88,78,64,82,90)
> subject<-c("k","k","m","m","m","k","k","m")
> s.f<-factor(subject,levels=c("k","m"))
> tapply(score,s.f,mean)
k m
82.0 84.5
데이터프레임 data.frame() 다양한 형태의 벡터들의 집합, 집합내는 동일 벡터, 집합별 길이가 같아야 함
예시)
> name <- c("A","B","C")
> age <- c(10,20,30)
> gender<-factor(c("M","F","M"))
> students <-data.frame(name,age,gender)
> students
name age gender
1 A 10 M
2 B 20 F
3 C 30 M
> students1 <-data.frame(names=name,ages=age,genders=gender)
> students1
names ages genders
1 A 10 M
2 B 20 F
3 C 30 M
> students$age
[1] 10 20 30
> students["age"]
age
1 10
2 20
3 30
> students[,2]
[1] 10 20 30
> students[1,]
name age gender
1 A 10 M
> str(students)
'data.frame': 3 obs. of 3 variables:
$ name : Factor w/ 3 levels "A","B","C": 1 2 3
$ age : num 10 20 30
$ gender: Factor w/ 2 levels "F","M": 2 1 2
attach() & detach() 데이터 프레임 내 항목들에 변수처럼 쉽게 접근, $를 제거해줌
> head(airquality)
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6
> airquality[sample(50,4),]
Ozone Solar.R Wind Temp Month Day
12 16 256 9.7 69 5 12
2 36 118 8.0 72 5 2
9 8 19 20.1 61 5 9
24 32 92 12.0 61 5 24
> airquality$Ozone
[1] 41 36 12 18 NA 28 23 19 8 NA 7 16 11 14 18 14 34
[18] 6 30 11 1 11 4 32 NA NA NA 23 45 115 37 NA NA NA
[35] NA NA NA 29 NA 71 39 NA NA 23 NA NA 21 37 20 12 13
[52] NA NA NA NA NA NA NA NA NA NA 135 49 32 NA 64 40 77
[69] 97 97 85 NA 10 27 NA 7 48 35 61 79 63 16 NA NA 80
[86] 108 20 52 82 50 64 59 39 9 16 78 35 66 122 89 110 NA
[103] NA 44 28 65 NA 22 59 23 31 44 21 9 NA 45 168 73 NA
[120] 76 118 84 85 96 78 73 91 47 32 20 23 21 24 44 21 28
[137] 9 13 46 18 13 24 16 13 23 36 7 14 30 NA 14 18 20
> attach(airquality)
> Ozone
[1] 41 36 12 18 NA 28 23 19 8 NA 7 16 11 14 18 14 34
[18] 6 30 11 1 11 4 32 NA NA NA 23 45 115 37 NA NA NA
[35] NA NA NA 29 NA 71 39 NA NA 23 NA NA 21 37 20 12 13
[52] NA NA NA NA NA NA NA NA NA NA 135 49 32 NA 64 40 77
[69] 97 97 85 NA 10 27 NA 7 48 35 61 79 63 16 NA NA 80
[86] 108 20 52 82 50 64 59 39 9 16 78 35 66 122 89 110 NA
[103] NA 44 28 65 NA 22 59 23 31 44 21 9 NA 45 168 73 NA
[120] 76 118 84 85 96 78 73 91 47 32 20 23 21 24 44 21 28
[137] 9 13 46 18 13 24 16 13 23 36 7 14 30 NA 14 18 20
> detach(airquality)
> Ozone
Error: object 'Ozone' not found
함수적용 with() 데이터 프레임내 항목들에 함수 또는 수식 적용
with(data,expr,...)
data : 데이터프레임 또는 리스트
expr : 수행할 함수 또는 수식 등의 표현
예시)
> head(cars)
speed dist
1 4 2
2 4 10
3 7 4
4 7 22
5 8 16
6 9 10
> cars$speed
[1] 4 4 7 7 8 9 10 10 10 11 11 12 12 12 12 13 13 13 13 14 14 14 14
[24] 15 15 15 16 16 17 17 17 18 18 18 18 19 19 19 20 20 20 20 20 22 23 24
[47] 24 24 24 25
> mean(cars$speed)
[1] 15.4
> with(cars,mean(speed))
[1] 15.4
> with(cars,plot(speed,dist))
# plot(cars$speed, cars$dist) 과 같음
부분집합 추출 subset()
subset(X,subset,select,drop=F,...)
x : 데이터프레임
subset : 부분집합을 생성할 조건
select : 변환할 열 조건식
drop : '['로 전달될 슬라이싱 조건
예시)
> head(airquality)
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6
> subset(airquality,Temp>93)
Ozone Solar.R Wind Temp Month Day
120 76 203 9.7 97 8 28
121 118 225 2.3 94 8 29
122 84 237 6.3 96 8 30
123 85 188 6.3 94 8 31
> subset(airquality,Temp>93,select = c(Ozone,Temp))
Ozone Temp
120 76 97
121 118 94
122 84 96
123 85 94
> subset(airquality,Temp>93,select = -c(Ozone,Temp))
Solar.R Wind Month Day
120 203 9.7 8 28
121 225 2.3 8 29
122 237 6.3 8 30
123 188 6.3 8 31
na.omit NA 데이터 제거
예시)
> str(airquality)
'data.frame': 153 obs. of 6 variables:
$ Ozone : int 41 36 12 18 NA 28 23 19 8 NA ...
$ Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...
$ Wind : num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
$ Temp : int 67 72 74 62 56 66 65 59 61 69 ...
$ Month : int 5 5 5 5 5 5 5 5 5 5 ...
$ Day : int 1 2 3 4 5 6 7 8 9 10 ...
> no<-na.omit(airquality)
> str(no)
'data.frame': 111 obs. of 6 variables:
$ Ozone : int 41 36 12 18 23 19 8 16 11 14 ...
$ Solar.R: int 190 118 149 313 299 99 19 256 290 274 ...
$ Wind : num 7.4 8 12.6 11.5 8.6 13.8 20.1 9.7 9.2 10.9 ...
$ Temp : int 67 72 74 62 65 59 61 69 66 68 ...
$ Month : int 5 5 5 5 5 5 5 5 5 5 ...
$ Day : int 1 2 3 4 7 8 9 12 13 14 ...
- attr(*, "na.action")=Class 'omit' Named int [1:42] 5 6 10 11 25 26 27 32 33 34 ...
.. ..- attr(*, "names")= chr [1:42] "5" "6" "10" "11" ...
리스트 list() 다양한 자료구조의 벡터를 가질수 있음, 데이터의 순서가 있음(인덱스), 데이터 집합별 길이가 다를 수 있음
> title <- "My List"
> ages <- c(31,43,41)
> numbers <-matrix(1:9, ncol = 3)
> names<- c("Baby","gentle","none")
> listEx<-list(title,ages,numbers,names)
> listEx
[[1]]
[1] "My List"
[[2]]
[1] 31 43 41
[[3]]
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
[[4]]
[1] "Baby" "gentle" "none"
> str(listEx)
List of 4
$ : chr "My List"
$ : num [1:3] 31 43 41
$ : int [1:3, 1:3] 1 2 3 4 5 6 7 8 9
$ : chr [1:3] "Baby" "gentle" "none"
> listEx[[1]]
[1] "My List"
> listEx2 <-list(title=title,age=ages,number=numbers,name=names)
#데이터를 넣을때 각 데이터 집합별로 변수를 만들어주자
> str(listEx2)
List of 4
$ title : chr "My List"
$ age : num [1:3] 31 43 41
$ number: int [1:3, 1:3] 1 2 3 4 5 6 7 8 9
$ name : chr [1:3] "Baby" "gentle" "none"
> listEx2$title
#dataframe처럼 변수에 접근이 쉽다
[1] "My List"
lapply(X,FUN,...)
X: 적용할 리스트
FUN: 적용할 함수
예시)
> x<-list(a=1:10, beta=exp(-3:3),logic=(c(T,F,F,T)))
> str(x)
List of 3
$ a : int [1:10] 1 2 3 4 5 6 7 8 9 10
$ beta : num [1:7] 0.0498 0.1353 0.3679 1 2.7183 ...
$ logic: logi [1:4] TRUE FALSE FALSE TRUE
> lapply(x,mean)
#각 변수별로 함수를 전달하고 list로 반환
$a
[1] 5.5
$beta
[1] 4.535125
$logic
[1] 0.5
> sapply(x,mean)
#각 변수별로 함수를 전달하고 벡터로 반환
a beta logic
5.500000 4.535125 0.500000
> str(sapply(x,mean))
Named num [1:3] 5.5 4.54 0.5
- attr(*, "names")= chr [1:3] "a" "beta" "logic"
'Data > R' 카테고리의 다른 글
[R 기초] 사용자정의함수, 재귀함수, z-test (0) | 2016.03.06 |
---|---|
[R 기초] 파일 가져오기, 데이터 뽑기, 조건문, 반복문 (0) | 2016.03.06 |
[R]4.소셜 네트워크 감정 분석 sentiment analysis (6) | 2016.02.19 |
[R]3. 결정 트리 Classification (9) | 2016.02.10 |
[R]2. 데이터 클러스터링 k-means 알고리즘 (4) | 2016.02.10 |