본문 바로가기
R 실전 고급/예제1

[R 데이터분석 실전] 여러 독립변수와 종속변수가 있는 데이터 분석 (3) 독립변수의 분석

by 만다린망고 2020. 8. 28.
반응형

[R 데이터분석 실전] 여러 독립변수와 종속변수가 있는 데이터 분석


(3) 독립변수의 분석


우리가 다루고 있는 데이터는 아래와 같습니다. 2번강의에서 데이터를 불러온 상태로 진행됩니다. 


> head(data)
  성별 직업 연봉  키 몸무게
1    F    D 6548 145     41
2    F    T 3543 155     69
3    F    D 4105 164     74
4    F    D 3363 169     80
5    F    T 4029 160     71
6    F    D 4659 145     51

table함수를 이용하면 독립변수의 범주별 인원수를 쉽게 구할 수 있습니다. 독립변수는 성별과 직업입니다. 


> table(data[,1:2])

    직업

성별  D  P  T

   F 21  8 21

   M 18 16 16


한눈에 알아보기 쉽도록 아래와 같은 표가 출력되도록 해봅시다. 



 

 D

 P

Total 

 F

21

8

 21

50

 M

18

 16

16

50

 Total

 39

24

 37

100


아래와 같이 코딩하면 됩니다. 


tb=table(data[,1:2])


t1=rbind(data.frame(D=tb[1,1],P=tb[1,2],T=tb[1,3],Total=sum(tb[1,1:3])),

         data.frame(D=tb[2,1],P=tb[2,2],T=tb[2,3],Total=sum(tb[2,1:3])),

         data.frame(D=sum(tb[1:2,1]),P=sum(tb[1:2,2]),T=sum(tb[1:2,3]),Total=sum(tb)))

rownames(t1)=c("F","M","Total")


View(t1)




더 쉬운 방법도 있습니다. 아래 코드를 이용하면 table이 형태를 


유지하며 data.frame으로 전환됩니다. 


> dt=as.data.frame.matrix(tb)

> dt

   D  P  T

F 21  8 21

M 18 16 16


여기에 total 행과 열을 추가해주겠습니다. 아래와 같이 더 간결한 코드로 표를 얻게 됩니다. 이후에 진행할 자동화에도 훨씬 용이한 형태입니다. 


tb=table(data[,1:2])

df=as.data.frame.matrix(tb)

df=cbind(df,apply(df,1,sum))

df=rbind(df,apply(df,2,sum))

rownames(df)=c(rownames(tb),"total")

colnames(df)=c(colnames(tb),"total")


> df

       D  P  T total

F     21  8 21    50

M     18 16 16    50

total 39 24 37   100


위 코드를 변형하여 표를 자동으로 그려주는 함수로 만들겠습니다. 데이터가 바뀌더라도 표를 그려줄 수 있는 함수입니다. 


표는 독립변수가 최대 2개인 경우까지 그릴 수 있습니다. 독립변수 하나는 행에, 다른 하나는 열에 배치할 수 있기 때문입니다. 


수준의 수는 많아도 상관 없습니다. 여기서 수준은 성별의 경우는 '남' '녀' 의 2수준이고, 직업의 경우는 '교사' '의사' '교수' 의 3수준입니다. 


먼저 함수의 이름을 정합시다. 독립변수들로 표를 그려주는 함수이므로, idv.tb 라고 부릅시다. 독립변수가 하나인 경우와 둘인 경우로 나눕니다. 함수는 아래와 같습니다. 


idv.tb=function(niv,data)

{

  if (niv==1){

    tb=table(data)

    df=as.data.frame(tb)

    df=rbind(df,data.frame(data="total",Freq=sum(df[,2])))

    print(df)

  } else if (niv==2) {

    tb=table(data)

    df=as.data.frame.matrix(tb)

    df=cbind(df,apply(df,1,sum))

    df=rbind(df,apply(df,2,sum))

    rownames(df)=c(rownames(tb),"total")

    colnames(df)=c(colnames(tb),"total")

    print(df)

  } else {

    print("please insert 1 or 2 as niv")

  } 

}  


입력 형식은 아래와 같습니다.


idv.tb(독립변수의 수, 데이터)


한번 사용해봅시다.


> idv.tb(1,data[,1])

   data Freq

1     F   50

2     M   50

3 total  100


> idv.tb(1,data[,2])

   data Freq

1     D   39

2     P   24

3     T   37

4 total  100


> idv.tb(2,data[,1:2])

       D  P  T total

F     21  8 21    50

M     18 16 16    50

total 39 24 37   100


> idv.tb(3,data[,2])

[1] "please insert 1 or 2 as niv"


반응형

댓글