#acl +All:read #format wiki #language ko #pragma description 기초의학통계학 및 실험; = R 기본 1: 데이터 다루기 = == 변수와 값 == 다음을 R에서 실행해보자. 결과가 예상대로 나오는가? {{{#!highlight r 2+3 2*3 2**3 (1+2)*3 }}} 다음은 어떤 결과가 나오겠는가? 먼저 예상한 후 실행 해 보자 {{{#!highlight r r <- 2 surface <- pi*r^2 }}} 참고로 <- 는 오른쪽의 값을 왼쪽에 대입하라는 뜻이며, = 로 대체할 수 있다. {{{#!highlight r r = 2 surface = pi*r^2 }}} 기대했던 결과가 안 나온다면 다음을 실행 해 보자 {{{#!highlight r surface print(surface) }}} 이것은 어떤 결과가 나오겠는가? {{{#!highlight r r = 3 surface r = 3 surface = pi*r^2 surface }}} == 변수와 벡터 == 벡터(vector)란 수열(혹은 문자열)같이 어떤 값의 나열이다. * R에서는 c( , , , , ) 이렇게 표현한다. 다음 코드는 무슨 뜻이겠는가? 계산 값이 어떻게 나올지 예상해보자. {{{#!highlight r r = c(1,2,3,4,5,6,7,8) surface = pi*r^2 surface }}} 이제 다음 코드도 이해할 수 있다 {{{#!highlight r plot(r, surface) }}} {{attachment:plot_r_circle.png||width=400px}} 여기까지가 numeric vector를 이용하여 값을 계산한 후 graph로 출력하는 방법이다. == 데이터형 == 숫자 1(혹은 2, 혹은 3, 혹은 4, 혹은 5....후략)은 세 가지 의미로 해석할 수 있다. 1. 숫자 1로서의 의미: 당연히 1 + 1 = 2 가 된다. 1. 문자 1로서의 해석: 이 경우 1 + 1 = 11 이 된다. (문자 1에 문자 1을 더함) 1. 기호로서의 1: 예를 들어 1학년이라는 뜻으로 1이라고 쓴 경우, 이것은 분류를 위한 기호일 뿐이다. 어떠한 계산도 가능하지 않다. * 1 대신에 병아리반, 햇님반이라고 해도 무리가 없다. 심지어 문자가 아닌 병아리나 햇님 이모티콘으로 바꿔도 상관없다. * 이런 경우를 범주형 값(categorical value)라고 하는데 R 세계에서는 factor라고 부른다. 문제는 인간은 이 중 어떤 뜻의 1인지 순식간에 판단을 하지만, 컴퓨터는 이게 안 된다. 인간이 명시해주지 않으면 오류가 생긴다. 1. 변수에 숫자를 그대로 입력하면 R는 numeric 값으로 인식한다. 예: a <- 3 1. 변수에 입력하는 값에 따옴표 (" 혹은 ' 둘 다 가능)를 붙히면 문자(character)로 인식한다. 예: a <- '3' 1. 지금 다루는 값이 범주형(categorical)이라면 factor() 로 명시해준다. 예: a <- factor(3) 다음 코드는 오류를 포함한다. 어떤 오류가 있는가? {{{#!highlight r r = c(1,2,3,4,5,6,7,8) r = factor(r) surface = pi*r^2 surface }}} iris 데이터의 Species는 범주형(categorical, or factor) vector이다. {{{#!highlight r str(iris$Species) }}} * 이 값(setosa, versicolor, virginica)은 범주형이 아니고 문자형으로 저장될 수도 있었다. * 그 때 달라지는 점(유리한 점 or 불리한 점)이 무엇일까...? == data.frame == '''data.frame'''은 R에서 '''가장 많이 쓰는 자료형'''이다. * 1개 이상 vector를 모아 놓은 것인데, 언뜻 MS excel의 worksheet와 비슷하게 생겼다. * Excel sheet는 자료형이 cell 별로 다를 수 있지만, R에서는 vector 별로 같은 자료형이어야 한다. * 즉 excel에서는 같은 column에서 1번 cell에 이름, 2번 cell에 키, 3번 cell에 몸무게를 입력해도 되지만, * R에서는 이름 column에는 이름만 문자형 vector로 입력해야 하고, 키는 숫자형 vector로 옆 column에 입력해야 한다. * 두번째 사람의 이름, 키, 몸무게는 그 다음 줄(row)에 입력한다. 이 각각의 row를 record 혹은 data point라고 부른다. * 불편해 보일 수 있지만 오류와 실수의 가능성을 줄여주므로 데이타 사이즈가 커질수록 더 편한 방식이다. data.frame의 예시: {{attachment:head_iris.png||width=439}} * Numeric vector 4개 (```Sepal.Length```, ```Sepal.Width```, ```Petal.Length```, ```Petal.Width```)와 ```Species``` vector로 이루어진 data.frame이다. * Species는 문자형(character)가 아니고 분류형(factor) 자료이다. ```str(iris)```로 확인 가능 === data.frame 만들기 === ```data.frame()```함수로 data.frame을 만들 수 있다. {{{#!highlight r data.frame() }}} * 결과: data frame with 0 columns and 0 rows 가 만들어진다. * 참고로 vector는 ```c()``` 이렇게 만든다. 빈 data.frame 대신 내용이 있는 data.frame을 만들어보자. {{{#!highlight r # data.frame의 내용은 vector 입니다. name <- c('Mike','Tim','Jane','Bob','Dylan','Liz') # 키와 몸무게는 타이핑이 귀찮으니 sample() 함수로 지정 해 줍시다. # sample() 함수는 주어진 range에서 n개의 숫자를 고르는 역할을 합니다. height <- sample(160:180, 6) weight <- sample(45:80, 6) # 성별도 sample() 함수로 지정 해 볼까요? (어차피 가짜 데이타...) sex <- sample( c('M','F'), 6, replace=TRUE) # sampling을 할 모집단으로 c('M', 'F') 을 주었습니다. # replace=TRUE 옵션을 지정하여 중복해서 선택이 가능하도록 했습니다. # 준비한 vector들을 하나의 data.frame으로 묶습니다. data.frame(Name = name, Height = height, Weight = weight, Sex=sex) # df라는 변수를 준비하여 이 data.frame을 대입합니다. df <- data.frame(Name = name, Height = height, Weight = weight, Sex=sex) # 이 과정을 하나의 문장으로 만들 수도 있습니다. df <- data.frame(Name = c('Mike','Tim','Jane','Bob','Dylan','Liz'), Height = sample(160:180, 6), Weight = sample(45:80, 6), Sex = sample( c('M','F'), 6, replace=TRUE)) # 마지막 괄호 닫는 것 잊지 마시길 }}} 만든 data.frame을 구경 해 볼까요? {{{#!highlight r df str(df) plot(df) }}} BMI 지수를 계산해서 이 data.frame에 BMI 라는 이름의 vector로 추가 해 봅시다. {{{#!highlight r # 체질량지수 BMI = weight (킬로그램) / heigt(미터)의 제곱이므로 df$BMI <- df$Weight / (df$Height / 100)^2 # 확인 해 보면, df }}} ----- <>