'index'에 해당되는 글 2건

  1. 2019.09.07 [데이터 다루기] Matrix 편
  2. 2019.09.01 [데이터 다루기] Vector편

이번에 다뤄볼 주제는 Matrix입니다.

앞서 소개를 드린것 처럼 matrix는 2차원 형태의 데이터입니다.

익숙한 엑셀 데이터처럼 2차원 표 형태라고 생각하시면 편할 것 같아요.

Matrix는 2차원 구조다보니 행(row), 열(column)이 존재합니다. 행을 row, 열을 col이라고 부르도록 할께요.

그럼 간단하게 Matrix를 만들어볼까요.

matrix(요소, row 수, col 수)를 이용하여 만들 수 있습니다.

보시는 것 처럼 숫자 1~6이 들어가 있는 matrix를 만들었어요.

첫 번째 col에 먼저 1~3이 채워지고 그다음 col에 4~6이 채워집니다.

만약 row순서대로 숫자를 채우고 싶다면 byrow=TRUE를 추가해주시면 됩니다.

보시는 것 처럼 첫 번째 row에 1,2가 먼저 채워지고 두 번째 row에 3,4가 채워집니다.

Matrix에는 row와 col의 index가 부여가 됩니다. 즉 2개의 index가 부여되며 순서는 [row, col]이에요.

예시에서 보이듯 2번째 row의 2번째 col에 해당하는 값인 5를 출력해 줍니다.

만약 하나의 값이 아닌 여러개를 동시에 출력하고 싶다면 어떻게 하면 될까요?

그 방법은 Index에 숫자 하나를 넣는 것이 아닌 vector를 넣는 것입니다.

예시에서 보이듯 z라는 matrix에서 2, 3번째 row와 1, 3번째 col에 해당하는 2, 3, 10, 11이 matrix형태로 출력됩니다.

그렇다면 일부만 뽑는것이 아니라 row전체를 뽑거나 col전체를 뽑아주려면 해당하는 index를 모두 입력해야 할까요?

꼭 그럴 필요는 없습니다.

만약 row를 뽑는다면 col에 해당하는 index를 빈칸으로 두시면 됩니다.

반대로 col을 뽑는다면 row에 해당하는 index를 빈칸으로 두시면 됩니다.

예시에서 보이듯 index를 [1, ]로 두면 z matrix의 첫 번째 row인 1, 5, 9, 13을 출력해주고, index를 [, 1]로 두면 z matrix의 첫 번째 col인 1, 2, 3, 4를 출력해줍니다.

 

Matirx의 요소 일부를 변경하는 방법은 vector와 마찬가지로 index로 뽑아낸 다음 할당을 하면 됩니다.

가운데 숫자만 100, 200, 300, 400으로 변경된 것을 볼 수 있어요.

Matrix의 경우 vector와 마찬가지로 한가지 형태의 데이터만 넣을 수 있습니다.

만약 문자를 넣게되면 숫자가 문자로 강제 변환됩니다.

(이 내용은 제가 이전에 올려둔 [데이터 구조]편을 참고해주세요! https://www.bicbear.com/7)

자 그렇다면 만들어진 matrix에서 row나 col을 추가하는 방법은 무엇이 있을까요?

바로 rbind(), cbind()라는 함수를 사용하는 거에요.

말 그대로 rbind는 row를 cbind는 col를 붙여주는 함수입니다.

예시에서 보이듯 vector 또는 matrix를 바로 붙일 수 있습니다. 이때 주의하셔야 할 점은 row나 col수를 맞춰줘야 하는건데요.

만약 맞추지 않고 사용한다면 경고 메시지가 뜨면서 숫자를 반복해서 넣거나, 일부가 잘릴 수 있습니다.

row 수가 3개인데 2개만 넣은 경우 숫자 하나가 반복되어 입력되고, 4개를 넣은 경우 남은 하나가 입력되지 않습니다.

 

예외적으로 만약 추가할 row나 col에 같은 숫자만 입력하고 싶다면 꼭 vector형태로 갯수 맞춰서 넣을 필요없이 숫자 하나만 입력해도 가능합니다.

 

이 다음 글에서 다뤄볼 data.frame과 matrix는 매우 많이 사용되는 데이터 구조에요!

익숙해지시면 많이 도움 되실거에요~!

Posted by 코딩곰돌이
,

이번 글에서는 R에서 기본 구조인 vector를 다루는 방법에 대해 알아보도록 할게요!

먼저 vector를 생성하기 위해서는 c(요소1, 요소2, ... )를 사용하면 됩니다.

보시는 것처럼 c()로 완전히 비워서 할당을 하면 NULL로 빈 벡터가 생성됩니다.

그리고 콤마로 분리를 시켜주다가 값을 하나 비우게 되면 에러가 나는 것을 볼 수 있습니다.

그렇다면 숫자를 입력하여 만들 때 1,2,3,4,... 이렇게 모두 입력하는 방법밖에 없을까요?

아닙니다 간단히 c(첫 숫자 : 끝 숫자)를 입력해주면 됩니다! 간단하죠?

그럼 1, 2, 3, 4, 5, 6으로 구성된 vector를 만들면 다음과 같습니다.

R의 경우 index를 1번부터 부여를 합니다.(python은 0부터 시작하기 때문에 python에 익숙하신 분들은 헷갈릴 수 있어요)

index를 이용하여 값을 뽑기 위해서는 vector를 할당한 변수명[index]를 입력하시면 됩니다.

값을 하나만 입력하면 해당하는 index에 있는 값을 보여주고, vector 형식으로 여러개의 index를 입력하면 여러개의 값을 한번에 출력해줍니다.

vector내의 값을 수정하거나 제거하는 방법은 간단히 index를 이용하면 됩니다.

그럼 예를 한번 볼까요?

앞에서 만들어둔 v4에서 4번째 값은 90이었습니다. 이것을 100으로 바꾸기 위해서 변수 자리에 v4[4]를 입력하여 vector v4의 4번재 인자를 설정한 다음 100으로 할당해주면 값이 변경되는 것을 확인할 수 있습니다.

이제 값을 제거해보도록 할게요.

5번째 값인 50을 지우려면 v4[-5]라고 하면 됩니다. 즉 index에 -를 붙여주면 끝이에요!

5번째 있던 50이 사라진 것을 보실 수 있어요.

 

만들어진 vector에 값을 추가하거나, vector를 합치는 방법을 알아보도록 할게요.

vector에 값을 추가하는 방법은 c( ) 를 이용하는 방법인데요. 다음과 같아요.

기존의 vector(v4)의 끝에 값을 추가하는 방법은 그냥 c(v4, 추가하려는 값)을 사용하면 되구요.

중간에 넣기 위해서는 v(v4[추가하려는 자리 앞 index], 추가하려는 값, v4[추가하려는 자리 뒤 index] ) 입니다.

설명만 보면 헷갈리니까 예를 한번 볼게요.

기존에 만들어둔 vector를 합치는 방법도 간단합니다.

c(vector1, vector2)라고 입력해주면 끝이에요.

 

그렇다면 vector를 정렬하는 방법은 무엇이 있는지 있을까요?

sort(), order()라는 함수를 이용할 수 있습니다. 두 함수 모두 정렬을 할 수 있지만 사용방법이 조금 다릅니다.

먼저 sort()를 보도록 할게요.

sort함수는 기본적으로 vector내의 값을 작은값부터 큰값 순서로 정렬하여 출력해줘요.

만약 순서를 뒤집어 큰 값부터 작은값 순서로 정렬하고 싶다면 decreasing=T 또는  decreasing=TRUE라고 추가를 해주시면 됩니다.

다음으로 order()입니다.

order함수는 sort와 달리 index를 출력해줘요.

예를 보면서 설명해드릴께요.

order함수는 값을 정렬한 후 그 값이 가지고 있던 원래 index를 출력해줍니다.

앞에서 만든 v6에서 보면 가장 작은 값은 7번째에 있는 10, 가장 큰 값은 4번째에 있는 100입니다.

따라서 order(v6)를 하면 가장 작은 수 10이 있는 index 7이 제일 앞으로 나오고, 그 다음 숫자인 20이 있는 index 2를.... 이런식으로 출력하여 마지막에는 가장 큰 수인 100이 있는 index인 4를 마지막으로 출력해줍니다.

따라서 sort함수와 같이 정렬된 값을 얻고싶다면 order로 정렬된 index를 이용하여 다음과 같이 입력하면 됩니다.

sort함수와 마찬가지로 큰 값부터 정렬을 하고싶다면 decreasing=T 또는  decreasing=TRUE라고 추가를 해주시면 됩니다.

 

sort함수보다 한 단계 복잡한데요. 그럼 sort만 사용하면 될텐데 왜 order를 사용할까요.

지금은 1차원 구조인 vector를 사용하기 때문에 sort만 사용해도 충분합니다. 그러나 2차원 구조인 matrix나 data.frame을 다룰 때, 한 column기준으로 정렬하기 위해서 사용합니다.

엑셀에서 한 column기준으로 정렬하는 것을 생각하시면 이해가 쉬우실거에요.

 

Posted by 코딩곰돌이
,