SW/R

R : list와 factor (개념 및 예제)

얇은생각 2019. 2. 6. 12:30
반응형

List

우리가 데이터를 저장할 때 vector, 또 matrix, data frame을 썼습니다. 그것 말고도 많이 쓰이는 것 중에 list와 factor라고 하는 type이 있습니다.




list는 일차적으로는 vector하고 비슷합니다. vector는 들어가는 원소들의 데이터 type이 다 똑같아야 하는 것입니다. 똑같아야 저장이 되는데, 이 리스트는 아무거나 들어갑니다. 숫자 들어갔다가 문자 들어갔다가 심지어는 vector도 들어갔다가, 또 다른 matrix로 저장하고, 그냥 뭐 이상한 보따리 같은 형태로 되어있습니다. 구분해서 짝짝짝 들어갈 수 있는 섞어서 넣을 수 있는 형태가 list입니다. 그래서 이 예를 보면 list에 name은 kim 이렇게 되어있습니다. 이 name은 이렇게 준 이 name은 vector도 데이터가 들어가면 데이터마다 이름을 붙일 수 있습니다. 그 이름을 붙이면서 동시에 데이터를 넣는 방법입니다. 그래서 kim이라는 데이터가 첫 번째 들어가는데, 그것의 이름은 name이라는 뜻입니다. 그 다음 두 번째는 address=pusan 이렇게 되어 있습니다. pusan이라는 데이터를 두 번째로 집어넣었는데 그것의 이름은 address입니다. 쭉 보면은 이제 다 문자열이 들어가다가 age=20 이렇게 되어 있습니다. 그 다음 마지막 부분 married는 논리값이 들어갔습니다. 그래서 이런 식으로 문자, 숫자 이렇게 단일 값도 넣을 수 있습니다. 여기에 심지어는 matrix도 막 집어넣을 수 있습니다. 그래서 굉장히 편리할 수도 있고 복잡할 수도 있습니다.




그래서 list에서 원소를 뽑아오는 방법은 vector하고 조금 다릅니다. 일단 멤버에서 첫 번째에 내가 입력한 원소를 뽑고 싶다면 꺽쇠([[ ]]) 두개를 씁니다. vector는 꺽쇠 하나입니다. 그런데 list는 반드시 이렇게 해야 합니다. 만약에 꼭 vector처럼 꺽쇄 하나를 쓰면, 우리가 원하는 게 아닙니다. 그래서 이렇게 해야지 원래 우리가 저장할 때의 그 데이터 type을 그대로 가져옵니다. 만약에 꺽쇠 하나로 하게 되면 우리가 저장한 type이 아니라 또 결과도 list입니다. list에 있는 것을 뽑았는데 결과도 list가 됩니다. 그래서 여러가지 작업할 때 어려움이 있으니 반드시 반드시 어떤 특정한 위치의 원소를 뽑을 때는 꺽쇠 두개 안에 숫자를 씁니다.



factor


이번에는 이제 팩터(Factor)입니다. 이 펙터(Fator)는 문자형 변수입니다.  문자형 변수라는 특징이 있습니다. 또 하나는 특정 종류의 값만 가질 수 있는 어떤 데이터 type입니다. 예를 들면 혈액형 A형, B 형 이런게 있습니다. 그러면은 혈액형에 대한 자료수집를 합니다. 그러면  A, 어떤 사람은 B, 어떤 사람은 AB형, O형 이렇게 쭉 나오죠. D형, F형 이런 건 없습니다. 이럴 때 A, B, AB, O 이 네 개만 들어오게 어떻게 막을 수 없을까? 그 때 쓰는 것이, 펙터(Factor)입니다.


blood.type 이라고 팩터(Factor)라고 해서 A, A, AB, O, B 라고 있습니다. 그냥 C해서, A, A, AB 이렇게 하면 벡터로 저장이 되는데 이것을 펙터(Factor)라는 함수를 통과시키면 펙터타입이 됩니다. 팩터타입이 되면, 팩터타입으로 바꾸면서, 어떤일이 일어나냐면, 우선 이 안에 있는 종류를 다 살펴봅니다. 이 안에는 A형, AB형, O형,  B형 이것만있네, 그러면 일단 팩터로(Factor)로 한번 fix가 되면, 그 다음에는 blood.type에 D나 F같은 것들을 못 넣습니다. 반드시 blood.type에는 들어갈 수 있는 값이 A, O, AB  이것으로 픽스가 된다는 얘기입니다.




그래서 blood.type을 해보고 이것이 팩터(Factor)냐, 알고 싶다면, is.Factor라는 함수를 통과시켜 보면 금방 알 수가 있습니다. 여기 예에 있는 것 처럼, blood.type에 D라고 하는 값을 가져다 넣게 되면 에러가 나옵니다.


그다음에 A, A, AB, O 이것을 백터로 저장을 하게 되면, 백터의 값을 보면 그냥 따옴표가 붙어서 A, A, AB 이렇게 나놉니다. 그런데 백터 타입은 따옴표가 떨어집니다. 그래서 이것만 봐도, 이것이 팩터(Factor)타입인지, 백터타입인지, 구분이 됩니다.




Labels가 나오면, Labels가 의미하는 것은 blood.type에는 A, A, AB, O만 들어올 수 있습니다. 그리고 실제 지금 존재하는 모든 데이터들은 A나 A, AB, B 이거 중에 하나를 알려줍니다. 그래서 이 factor type의 데이터에 대해서 as.numeric 이라고 하는 함수 as.numeric은 숫자로 좀 바꿔 달라 이러한 뜻이 됩니다. 그러면은 A, A, AB, O, B가 숫자로 바뀌는데 1, 1, 2, 4, 3 이렇게 바뀝니다. 그러면 어떠한 기준으로 숫자를 바뀌냐면 Levels에 있는 게 숫자의 순서입니다. 즉, A가 1이 되구요. AB가 2가 되고, B가 3이 되고, O가 4가 됩니다. 그런 식으로 랩핑을 해 가지고 원래 있는 데이터 A, A, AB, O, B를 이 Levels에 있는 이 순서대로 숫자로 바꾸어서 전환을 해 줍니다. 이렇게 할 수 있는 것이 factor type의 특징입니다.

반응형