일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- R
- 단군
- 통계
- t test
- 기자
- ANOVA
- 한서
- spss
- 후한서
- 유주
- 독사방여기요
- linear regression
- 패수
- 우분투
- 선형회귀분석
- 한서지리지
- 기자조선
- 창평
- 히스토그램
- 태그를 입력해 주세요.
- Histogram
- repeated measures ANOVA
- post hoc test
- 지리지
- categorical variable
- 풍백
- 통계학
- 낙랑군
- 신라
- 고구려
- Today
- Total
獨斷論
통계 GNU R에서 데이터 구조 종류와 사용방법 본문
R에서 사용되는 데이터 구조의 종류와 사용방법에 대해서 알아보자.
벡터Vector
벡터에 데이터를 입력하기 위해서는 c()라는 함수를 이용하는데 여기서 c는 concatenate의 약자이다.
> a <- c(5, 1.2, 6, -7.5, 100.0)
> b <- c('one', 'two', 'three')
> c <- c(TRUE, FALSE, TRUE, TRUE, T, F)
> c
벡터 각각의 원소는 아래와 같이 참조가 가능하다.
> a[2]
> a[c(1,3)]
> a[3:5]
위 R script의 첫번째 줄은 a의 두번째 원소값이고, 두번째 줄은 a의 1번째와 3번째 원소값이고 세번째 줄은 a의 3에서 5번째 원소값을 의미한다.
행렬matrix
행과 열로 이루어진 2차원 변수이다.
데이터 입력은 matrix()라는 함수를 이용한다.
> y <- matrix(c(1, 3, 5, 7, 9, 11, 13, 15), ncol=2)
> y
[,1] [,2]
[1,] 1 9
[2,] 3 11
[3,] 5 13
[4,] 7 15
아무런 옵션이 주어지지 않는다면 열방향으로 데이터가 순서대로 들어간다는 것에 유의하여야 한다.
만약 행방향으로 넣고 싶다면 아래와 같이 한다.
> y <- matrix(c(1, 3, 5, 7, 9, 11, 13, 15), ncol=2, byrow=TRUE)
> y
[,1] [,2]
[1,] 1 3
[2,] 5 7
[3,] 9 11
[4,] 13 15
> y[, 2][1] 3 7 11 15
> y[2, ][1] 5 7
> y[c(2,4), 2]
[1] 7 15
배열Array
이것은 3차원 이상의 변수를 가진 것을 말한다.
array()라는 함수를 이용하면 되는데 고급의 통계를 사용하지 않는 이상 잘 사용되지 않는 데이터 형이다.
아래 R script는 [3x4x2] 크기의 array를 만드는 방법을 보여준다.
> z <- array(1:24, c(3,4,2))
> z
, , 1
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
, , 2
[,1] [,2] [,3] [,4]
[1,] 13 16 19 22
[2,] 14 17 20 23
[3,] 15 18 21 24
Data Frame
data frame은 아주 유용한 데이터 형태이다.
아래와 같은 데이터를 가지고 있다고 가정할때 어떻게 이런 데이터를 입력하여야 할까?
data frame을 이용하면 아주 편리하다.
사용하는 함수는 data.frame()이다.
아래 script는 위 데이터를 입력하는 방법을 보여준다.
> SubjID <- 1:4
> ExpDate <- c("01/25/1999", "02/05/1999", "02/25/1999", "03/01/1999")
> Age <- c(25, 41, 17, 50)
> Disease <- c("Type1", "Type1", "Type2", "Type2")
> Status <- c("Poor", "Poor", "Good", "Improving")
> Exp.Dat <- data.frame(SubjID, ExpDate, Age, Disease, Status)
> Exp.Dat
SubjID ExpDate Age Disease Status
1 1 01/25/1999 25 Type1 Poor
2 2 02/05/1999 41 Type1 Poor
3 3 02/25/1999 17 Type2 Good
4 4 03/01/1999 50 Type2 Improving
> Exp.Dat <- data.frame(SubjID, ExpDate, Age, Disease, Status, stringsAsFactors = FALSE)
data frame의 값들을 참조하기
data frame으로 선언된 변수의 값을 참조하는 방법은 여러가지가 있는데
vector나 matrix처럼 참조할 수 있고
> Exp.Dat[1]
SubjID
1 1
2 2
3 3
4 4
> Exp.Dat[2]
ExpDate
1 01/25/1999
2 02/05/1999
3 02/25/1999
4 03/01/1999
> Exp.Dat[c(1,3)]
SubjID Age
1 1 25
2 2 41
3 3 17
4 4 50
> Exp.Dat[1:3]
SubjID ExpDate Age
1 1 01/25/1999 25
2 2 02/05/1999 41
3 3 02/25/1999 17
4 4 03/01/1999 50
> Exp.Dat$Disease[1] "Type1" "Type1" "Type2" "Type2"> Exp.Dat["Disease"]Disease1 Type12 Type13 Type24 Type2> Exp.Dat[c("SubjID", "Disease")]SubjID Disease1 1 Type12 2 Type13 3 Type24 4 Type2
Factors
Nominal과 ordinal 변수들을 코딩하는 방법이며 factor()라는 함수를 이용한다.
앞서 data.frame()을 이용할때 Status와 Disease가 문자열로 저장되었지만 이제 이를 factor로 바꾸어 저장하여 보자. Nominal 변수는 unordered factor로 코딩되고 ordinal 변수는 ordered factor로 코딩된다. 즉, Disease는 unordered factor이고 Status는 ordered factor이다.
> SubjID <- c(1,2,3,4)> ExpDate <- c("01/25/1999", "02/25/1999", "02/25/1999", "03/01/1999")
> Age <- c(25, 41, 17, 50)
> Disease <- c("Type1", "Type1", "Type2", "Type2")
> Disease <- factor(Disease, order=FALSE)
> Status <- c("Poor", "Poor", "Good", "Improving")
> Status <- factor(Status, order=TRUE, levels=c("Poor", "Improving", "Good"))
> Exp.Dat <- data.frame(SubjID, ExpDate, Age, Disease, Status)
> str(Exp.Dat)
'data.frame': 4 obs. of 5 variables:
$ SubjID : num 1 2 3 4
$ ExpDate: Factor w/ 3 levels "01/25/1999","02/25/1999",..: 1 2 2 3
$ Age : num 25 41 17 50
$ Disease: Factor w/ 2 levels "Type1","Type2": 1 1 2 2
$ Status : Ord.factor w/ 3 levels "Poor"<"Improving"<..: 1 1 3 2
변수 Disease는 옵션에 order=FALSE라고 명시하여 unordered factor로 코딩하였고
변수 Status는 옵션에 order=TRUE라고 한 후에 그 level을 c()함수를 이용하여 설정하였다.
그결과를 다음과 같이 확인할수가 있다.
> Exp.Dat$Disease
[1] Type1 Type1 Type2 Type2
Levels: Type1 Type2
> Exp.Dat$Status
[1] Poor Poor Good Improving
Levels: Poor < Improving < Good
List
List는 매우 복합적인 데이터형이인데, 스칼라, 벡터, 행렬, data frame 등을 한꺼번에 가질수 있는 변수형이다.
list()라는 함수를 이용하여 만든다.
> myname <- "Park"
> wifename <- "Kim"
> nchild <- 5
> childages <- c(5, 7, 9, 10, 15)
> mydat <- matrix(1:15, ncol=5)
> mylist <- list(my.name=myname, wife.name=wifename, no.child=nchild, child.ages=childages, family.dat=mydat) # 이건 한 줄이다
> mylist
$my.name
[1] "Park"
$wife.name
[1] "Kim"
$no.child
[1] 5
$child.ages
[1] 5 7 9 10 15
$family.dat
[,1] [,2] [,3] [,4] [,5]
[1,] 1 4 7 10 13
[2,] 2 5 8 11 14
[3,] 3 6 9 12 15
List 데이터 참조하기
List를 참조하려면 중괄호를 두번 사용하거나 $ 뒤에 list의 하위 변수명을 쓰면 된다.우선 중괄호 두번 사용하는 방법은 아래와 같다.
> mylist[[1]]
[1] "Park"
> mylist[[2]]
[1] "Kim"
> mylist[[5]]
[,1] [,2] [,3] [,4] [,5]
[1,] 1 4 7 10 13
[2,] 2 5 8 11 14
[3,] 3 6 9 12 15
> mylist[[5]][ ,1]
[1] 1 2 3
> mylist[[5]][1, ]
[1] 1 4 7 10 13
> mylist[[5]][1,3]
[1] 7
mylist[[5]]는 다섯번째 하위 변수이므로 mylist의 family.dat와 같다.
그런데 family.dat가 행렬이므로 이 역시 행렬을 참조하는 방법을 이중 중괄호 뒤에 더할수 있다.
mylist[[5]][ ,1]은 곧 family.dat의 첫번째 열이며
mylist[[5]][1, ]은 곧 family.dat의 첫번째 행이며
mylist[[5]][1,3]은 곧 family.dat의 첫번째 행 두번째 열의 값이다.
이는 똑같이 하위 변수명을 이용하여 참조가 가능하다.
> mylist$my.name
[1] "Park"
> mylist[["my.name"]]
[1] "Park"
> mylist$wife.name
[1] "Kim"
> mylist[["wife.name"]]
[1] "Kim"
> mylist$family.dat
[,1] [,2] [,3] [,4] [,5]
[1,] 1 4 7 10 13
[2,] 2 5 8 11 14
[3,] 3 6 9 12 15
> mylist[["family.dat"]]
[,1] [,2] [,3] [,4] [,5]
[1,] 1 4 7 10 13
[2,] 2 5 8 11 14
[3,] 3 6 9 12 15
> mylist[["family.dat"]][,1]
[1] 1 2 3
> mylist[["family.dat"]][1,]
[1] 1 4 7 10 13
> mylist[["family.dat"]][1,3]
[1] 7