R 의 데이터 구조에는 스칼라, 벡터, 행렬, 요인, 데이터 프레임, 리스트가 있습니다.  이중에서 벡터와 데이터 프레임이 통계 분석 시에 가장 많이 사용됩니다. 

 

이번 포스티에서는 데이터 프레임에서 신규 변수를 생성하는 두 가지 방법에 대해서 알아보겠습니다.  (1) 첫번째 방법은 'dataframe$variable' 처럼 '$'를 사용하는 것이며, (2) 두번째 방법으로는 transform() 함수를 사용하는 것입니다.

 

transform() 함수와 함께 within()함수를 사용해서 연속형 변수를 범주형 변수로 변환하는 방법에 대해서는 이전 포스팅 (☞ 바로가기) 을 참고하시기 바랍니다.

 

 

 R 데이터 프레임 신규 변수 생성 : dataframe$variable, transform()

 

(1) dataframe$variable

 

성인의 키와 몸무게를 가지고 비만도를 나타내는 지수인 체질량 지수(體質量指數, body mass index, BMI)를 신규로 생성하여 보도록 하겠습니다.

 

먼저 가상으로 성인 10명의 키와 몸무게로 구성된 데이터 프레임을 만들어보겠습니다.

 

> height <- c(175, 159, 166, 189, 171, 173, 179, 167, 182, 170)
> weight <- c(62, 55, 59, 75, 61, 64, 63, 65, 70, 60)
> h_w_d.f <- data.frame(height, weight)
> h_w_d.f
   height weight
1     175     62
2     159     55
3     166     59
4     189     75
5     171     61
6     173     64
7     179     63
8     167     65
9     182     70
10    170     60

 

체질량 지수(BMI)를 구하는 공식은 키가 t 미터, 몸무게가 w 킬로그램일 때 BMI = w/t^2 입니다. (키 단위는 미터 임에 주의)

 

이번에는 위의 체질량 지수(BMI) 공식에 따라 dataframe$variable를 이용하여 데이터 프레임에 BMI 변수를 신규로 생성해 보도록 하겠습니다.

 

> options(digits=4) # 숫자 개수 지정해주는 옵션. 이거 지정 안해주면 소숫점 5~6자리까지 나옴 > h_w_d.f$bmi_1 <- h_w_d.f$weight/(h_w_d.f$height/100)^2 > h_w_d.f height weight bmi_1 1 175 62 20.24 2 159 55 21.76 3 166 59 21.41 4 189 75 21.00 5 171 61 20.86 6 173 64 21.38 7 179 63 19.66 8 167 65 23.31 9 182 70 21.13 10 170 60 20.76

 

 

위에서 보시는 것처럼 매번 dataframe$variable 을 입력해줘야만 하는게 꽤 불편합니다.  신규 변수 생성 하나 하고 말거면 뭐 그럭저럭 쓸 수도 있겠읍니다만, 다수 변수를 이용해서 다수 변수를 신규 생성해야 하는 경우라면 아무래도 손이 많이 가는 방법이라고 하겠습니다.

 

손, 발이 편하고자 하는 분이라면 아래의 transfrom() 함수를 이용해보시기 바랍니다.

 

 

(2) transform(dataframe, new_variable = 수식)

 

> ## transform()
> h_w_d.f <- transform(h_w_d.f, 
+                      bmi_2 = weight/(height/100)^2)
> 
> h_w_d.f
   height weight bmi_1 bmi_2
1     175     62 20.24 20.24
2     159     55 21.76 21.76
3     166     59 21.41 21.41
4     189     75 21.00 21.00
5     171     61 20.86 20.86
6     173     64 21.38 21.38
7     179     63 19.66 19.66
8     167     65 23.31 23.31
9     182     70 21.13 21.13
10    170     60 20.76 20.76

 

(1)번의 dataset$variable 에서 매번 '$'를 입력해줘야하는 번거로움 대비 transform()은 정말 깔끔 그 자체임을 알 수 있습니다. 

거기다가 한꺼번에 여러개의 변수를 생성하는 잇점도 있답니다.  아래 예제를 보시지요.

 

> options(digits=3)
> h_w_d.f <- transform(h_w_d.f, 
+                      bmi_sqrt = sqrt(bmi_2), 
+                      bmi_log10 = log10(bmi_2)
+                      )

 

> View(h_w_d.f)
 

 

 

transform() 함수와 함께 within()함수를 사용해서 연속형 변수를 범주형 변수로 변환하는 방법에 대해서는 이전 포스팅 (☞ 바로가기) 을 참고하시기 바랍니다.

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡' 단추를 꾸욱 눌러주세요.^^

 

728x90
반응형
Posted by Rfriend
,