R 프로그램 강좌 03 : 데이터 프레임 편집steemCreated with Sketch.

in kr •  7 years ago  (edited)

3. 데이터 프레임 편집

csv나 txt로 되어 있는 원본데이터를 불러올 수도 있지만, 직접 입력, 일부 수정 및 랜덤 데이터를 뽑을 수도 있습니다. R은 빅데이터를 분석하기 위한 툴이기 때문에 분석 대상인 원본 데이터를 잘 알아야 하며, 잘못된 부분에 대한 보정도 필요합니다.


3.1 데이터 프레임 직접입력 data.frame

데이터 직접 입력시 가장 흔히 하는 실수는 따옴표 ' 입니다. 숫자는 상관 없지만, 데이터의 이름을 표시할 때는 항상 따옴표를 써야 합니다.
name <- c(kim,lee,park,choi)
Error: object 'kim' not found

직접 입력을 위해서 임의로 값들을 지정하고, 실행을 시킵니다. 아래는 예제 입니다.

name <- c('kim','lee','park','choi')
age <- c(39,40,47,28)
sex <- c('f','m','m','f')
pay <- c(100, 200, 150, 300)

각각의 집합을 표와 같은 형태인 데이터 프레임으로 만들기 위해서는 "data.frame"이란 명령어를 사용합니다.
employee <- data.frame(name,age,pay,sex)

employee의 표는 다음과 같이 작성되었습니다.

스크린샷 2018-03-24 오전 9.44.49.png

3.2 데이터의 위치를 찾는 which

위의 데이터 프레임에서 나이에 대한 합을 a 라고 정의합니다. (명령어 sum을 사용)
a = sum(age)

스크린샷 2018-03-24 오전 9.47.19.png

마찬가지로 평균에 대한 부분은 mean 명령어를 사용합니다. 평균을 b라고 했을때, '평균이하'을 따로 분류하고 싶을 경우에는 논리기호 '<' 를 사용합니다. 이 데이터의 위치를 찾고 싶을 경우는 'which' 명령어를 사용합니다.
b = mean(age)
b <age
which (b<age)

스크린샷 2018-03-24 오전 9.49.43.png

3.3 데이터 프레임에서 특정값을 수정

만일 특정데이터가 틀렸을 경우에 어떻게 해야 할까요? 원본 데이터를 직접 수정하여 다시 불러올 수도 있지만, R에서 직접 바꿀 수도 있습니다. pay 부분에 첫번째 100이라는 값이 120으로 수정해야 한다면, 아래와 같이 실행합니다.

employee[1,3]<-120

employee를 다시 보면 변경된 값을 확인할 수 있습니다.

스크린샷 2018-03-24 오전 9.54.32.png

[x,y] 값은 좌표를 뜻하는 것으로 x는 행을 뜻하며, 여기서는 pay 값이고, y는 열을 뜻하며, 여기서는 3열의 값을 보여 줍니다.
employee[1,]
employee[,3]

스크린샷 2018-03-24 오전 10.36.05.png

행을 다루는 명령어는 하나 더 있습니다. $를 쓰고 뒤에 원하는 행의 제목을 선택하거나 직접 입력할 수 있습니다.
employee$

스크린샷 2018-03-24 오전 11.11.52.png

3.4 랜덤한 데이터를 추출 runif

랜덤한 숫자를 추출하는 방법은 random uniform의 runif 명령어 입니다.
runif(n, min, max)
최소값(min)과 최대값(max) 사이에 몇개(n)의 난수를 발생할 것인가 이며, 최소와 최대값을 넣지 않으면, 0~1까지 숫자로 난수를 만듭니다. 10 / 100 / 1000 개의 숫자를 만들었을때의 내용입니다.

runif (10)
runif (100)
runif (1000)

스크린샷 2018-03-24 오전 11.21.54.png

0~1000까지 난수를 발생시키는 간단한 방법은 곱하기 1000을 하면 됩니다.
runif (1000)x1000

스크린샷 2018-03-24 오전 11.27.55.png

소수점 자리가 필요하지 않은 경우에는 올림의 명령어 "ceiling"을 사용합니다.
x = ceiling (runif (10)10)*

스크린샷 2018-03-24 오전 11.31.23.png

마찬가지로 총 합과 평균을 구할 수 있습니다.

sum (x)
mean (x)

스크린샷 2018-03-24 오전 11.35.58.png

3~ 7 사이의 값을 논리연산자로 연결했을때의 결과입니다. 두 조건 모두를 만족해야 하는 "&"는 and를 의미하며, 둘중에 하나만 만족해도 되는 "|" 는 or 를 의미합니다.
x > 3 & x < 7 : 3~7 사이의 값
x < 3 | x > 7 : 3보다 작고, 7보다 큰 값

스크린샷 2018-03-24 오전 11.37.20.png

이런 논리 연산자를 통해 합과 평균을 구할 수도 있지만, 참과 거짓을 판단하는 논리기호도 사용할 수 있습니다. any는 하나라도 참값이 있어야 참이고, all은 모두가 참값이여야 참입니다.
sum (x < 3 | x > 7)
any (x < 3 | x > 7)
all (x < 3 | x > 7)
all (x >= 1)
x >= 1

스크린샷 2018-03-24 오전 11.42.59.png

기타) 간단한 그래프 그리기 및 반올림

막대 그래프를 그리려면, barplot 명령어를 사용합니다.

barplot (x)

스크린샷 2018-03-24 오전 11.46.33.png

올림(ceiling), 반올림(round), 내림(floor)에 대한 명령어를 적용해본 예 입니다.

k = runif(100, 10, 17)
ceiling (k)
round (k)
floor (k)

스크린샷 2018-03-24 오후 1.43.30.png

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

학교에서 코퍼스언어학 들을때 썼던 프로그램인데 덕분에 자연어 처리 및 빅데이터 처리에 대해 조금의 이해를 할 수 있게되었던 기억이 나네요 kr-dev? 개발쪽 태그 붙이시면 더많은분들이 볼수있을것 같네요

Congratulations @geekstarter! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 1 year!

Click here to view your Board

Support SteemitBoard's project! Vote for its witness and get one more award!

Congratulations @geekstarter! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 2 years!

You can view your badges on your Steem Board and compare to others on the Steem Ranking

Vote for @Steemitboard as a witness to get one more award and increased upvotes!