'Factor'에 해당되는 글 2건

  1. 2019.09.03 [데이터 다루기] Factor편
  2. 2019.08.27 [데이터 구조] vector? factor? matrix? data.frame?

이번에 다뤄볼 내용은 Factor입니다!

Factor의 경우 vector와 같이 1차원 형태의 구조를 가지고 있습니다.

통계에서 범주형 자료를 다루기 위해 사용되며, level이 존재합니다.

factor(vector)를 사용하여 factor를 생성할 수 있습니다.

예를 들어 9명의 혈액형 데이터를 입력하였다고 생각해봅시다.

위에서 보이듯 자동으로 4개의 level(A, AB, B, O)이 생성됩니다.

그렇다면 level의 순서는 바꿀 수 있을까요?

factor를 생성할 때 levels = c(원하는 level 순서)를 추가해주면 됩니다.

만약 A, B, AB, O 형 외에 없는것을 추가하더라도 level에는 추가될 수 있습니다.

 

그렇다면 factor에서 값을 변경하거나 추가하기 위해서는 어떻게 해야할까요?

만들어진 factor에는 level에 있는 값으로만 수정하거나 추가할 수 있습니다.

먼저 값을 바꿔볼까요?

먼저 만들어둔 f2라는 factor는 level이 A, B, AB, O입니다.

따라서 첫번째 값이 A는 level에 있는 값인 AB로는 변경할 수 있으나 level에 없는 c로 변경하려고 할 때 경고메시지가 나타나며 값은 NA로 바뀌게 됩니다.

다음으로 값을 추가해볼까요?

9개의 데이터가 있는 factor에 10번째 값을 추가해보았습니다.

변경하는 것과 마찬가지로 level에 없는 값을 입력하면 경고메시지가 나타나고 NA로 추가됩니다.

level에 있는 O를 추가하면 정상적으로 추가된 것을 확인할 수 있습니다.

 

만들어진 factor의 levels을 출력하거나 변경은 가능합니다. 하지만 그냥 변경하는 것은 추천하지 않는데요.

그 이유를 살펴보도록 할게요.

levels( )이란 함수를 사용하면 factor의 level를 출력할 수 있고, 값을 할당해주면 변경할 수 있습니다.

그런데 level순서를 변경하고 보면 원래 있던 값도 변경된 것을 볼 수 있습니다.

예를 들어 f2의 두번째 값인 B가 A로 변경된 것을 확인할 수 있어요.

왜 이렇게 된것일까요?

factor의 경우 A, B, AB, O의 값이 나열된 것처럼 보이기는 하지만 실제로는 level의 index가 저장되어 있습니다.

즉 원래 f2의 경우 AB대신 level의 AB index인 3이, B대신 level의 B index인 2가 저장되어 있는셈이죠.

이 상태에서 level을 변경하다보니 index 숫자에 해당하는 level에 값을 가지고 오게 되어 변경되는 것입니다.

 

factor에서 level을 변경하거나 값을 추가하는 경우 factor에서 바로 변경하시는 것 보다는 vector로 변경하여 수정을 하고, 다시 factor를 만드는 것을 추천합니다.(꼭 정답은 아니에요... 그냥 제 경험상 이 방법이 편해서 추천드린거에요.)

factor를 vector로 변경하는 방법은 무엇이 있을까요?

바로 as.numeric(), as.character()라는 함수를 사용하는 방법이에요!

as.numeric()이란 함수는 다른 형태의 데이터를 숫자로 바꾸어주는 함수이구요.

as.character()란 함수는 다른 형태의 데이터를 문자로 바꾸어주는 함수입니다.

 

이 함수를 이용하여 factor를 vector로 바꿀 수 있습니다.

만약 factor에 있는 값들이 문자인 경우 as.character(factor)를 하시면 됩니다.

factor에 있는 값들이 숫자인 경우는 조금 복잡합니다.

먼저 문자로 변경시켜준 후 숫자로 바꿔야 하는데요. 다음과 같이 하시면 됩니다.

as.numeric(as.character(factor))

예시에서 보이듯 as.numeric만 사용하게 되면 level의 index값으로 바뀌게 됩니다.

 

이 방법으로 factor를 vector로 변경 한 후 값을 추가하거나 변경하고 다시 factor를 생성하면 factor 때문에 값이 꼬이는 경우를 방지할 수 있습니다.(이것 때문에 에러 많이 내봤어요 ㅠㅠ)

 

Posted by 코딩곰돌이
,

이번에 다뤄볼 주제는 데이터의 구조에요~

유형?구조? 처음 접하시는 분은 헷갈릴 수 있어요.

하지만 정확히 어떻게 들어가는지 알아야 나중에 데이터를 다루고, 원하는 그림을 그리는데 도움이 될꺼에요.

R에서 사용하는 데이터의 구조는 1차원 형태의 vector, factor, 2차원 형태의 matrix, data.frame 그리고 다양한 데이터 형태의 집합인 list형태가 있습니다.

 

그럼 하나하나 간단히 살펴보도록 하겠습니다.

Vector의 경우 가장 기본적인 데이터 구조인데요.

그냥 단순히 숫자나 문자가 일렬로 모여있는 집합이라고 생각하면 됩니다.

예를 들어 한 반에 있는 학생들의 수학 성적이 70, 60, 90, 55, 95, 80, ... 이렇게 있다고 할때, 수학 성적을 모은것이 하나의 vector가 될 수 있습니다.

vector를 만들기 위해서는 c( )를 사용하며, 들어가는 각 값들을 콤마( , )로 구분시켜 주면 됩니다.

보시는 것처럼 콤마로 구분시켜주고 값을 넣지 않는다면 에러가 나타납니다.

또한 벡터에는 한가지 유형의 데이터만 들어갈 수 있습니다.

숫자는 숫자만, 문자는 문자만 들어갈 수 있어요.

만약 숫자와 문자를 같이 넣어주면 숫자는 문자로 강제 변환됩니다.

강제 변환되는 기준은 다음과 같습니다.

c(숫자, 문자) -> 문자

c(숫자, 논리) -> 숫자

c(숫자, 복소수) -> 복소수

즉 문자 > 복소수 > 숫자 > 논리 순서입니다.

 

Factor는 vector와 비슷한 모습으로 1차원 구조의 문자나 숫자의 집합입니다.

vector와 다르게 level이라는 것이 존재하는데요.

통계에서 범주형 자료 다루기 위하여 만들어진 데이터 구조이기 때문입니다.

예를 들어 혈액형의 경우 A, B, AB, O형 같이 카테고리로 나누어지는 데이터에서 사용됩니다.

factor(vector) 로 만들 수 있습니다.

factor에는 카테고리가 level로 나타나며, 문자형태로 보이지만, levels의 index로 부여가 되어있습니다.

as.numeric이란 함수를 사용하여 숫자로 변환시켜보면 factor1에 있던 값들이 levels의 index로 변하는 것을 볼 수 있습니다.

 

다음으로 볼 구조는 matrix입니다.

Row와 column으로 이루어진 2차원 형태입니다.

우리에게 익숙한 표 형태의 데이터라고 생각하시면 됩니다~!

matrix(인자, row 수, col 수) 로 만들 수 있습니다.

Vector처럼 한 matrix내에는 한 가지 유형의 데이터만 넣을 수 있습니다.

 

Data.frame은 matrix와 같이 row와 column으로 이루어진 2차원 구조입니다.

matrix와 거의 비슷하지만 차이점은 하나의 data.frame안에 여러 유형의 데이터를 넣을 수 있습니다. (column별로 동일하게 넣을 수 있습니다.)

data.frame(matrix)로 생성할 수 있습니다.

 

마지막으로 list의 경우 list(vector, factor, matrix, data.frame,...) 로 만들 수 있습니다.

데이터 구조 상관없이 넣어줄 수 있습니다.

다음 예시에서 v1은 vector, f1은 factor, m1은 matirx, d.f.set.up은 data.frame입니다.

 

R에서 사용되는 데이터의 구조에 대해 알아보았습니다.

다음 글에서는 각 데이터구조에 따라 다루는 방법을 알아보도록 할께요!

'R program' 카테고리의 다른 글

[데이터 다루기] Factor편  (0) 2019.09.03
[데이터 다루기] Vector편  (0) 2019.09.01
[데이터 유형] 숫자? 문자?  (0) 2019.08.23
[실행] 처음 실행 해보기!  (0) 2019.08.20
[설치] R 프로그램 설치  (0) 2019.08.18
Posted by 코딩곰돌이
,