R에서 데이터 분석을 한다고 했을 때 대부분의 데이터 형식은 데이터 프레임일 것입니다.  R을 처음 교육 받을 때는 벡터를 가지고 주로 실습을 하다가, 실전으로 넘어오면 데이터 프레임을 가지고 데이터 탐색, 전처리를 하게 되다 보니 데이터 구조 (스칼라, 벡터, 행렬, 요인, 데이터 프레임, 리스트)에 대해서 명확한 이해를 하지 않는 분들의 경우 헷갈리고 어려워하기도 합니다.

 

그래서 앞으로 서너번에 나누어서 데이터 프레임에서 사용할 수 있는 데이터 전처리/변환에 대한 함수들을 알아보도록 하겠습니다.

 

이번 포스팅에서는 먼저 데이터 프레임에서  names(), rename() 함수를 사용해서 변수명 변경하기를 해보겠습니다.

 

 

 데이터 프레임 변수명 변경 names(), rename()

 

 

(1) 데이터 프레임 변수명 변경 names()

 

먼저 MASS 패키지에 있는 Cars93 데이터 프레임 내 1~5번째 변수만 선택해서, base 패키지에 있는 names() 함수로 변수명을 변경해보겠습니다.

 

> ## 데이터 프레임 변수명 변경 rename()
> library(MASS)
> # Cars93 데이터 프레임 내 변수명 확인
> names(Cars93)
 [1] "Manufacturer"       "Model"              "Type"               "Min.Price"          "Price"             
 [6] "Max.Price"          "MPG.city"           "MPG.highway"        "AirBags"            "DriveTrain"        
[11] "Cylinders"          "EngineSize"         "Horsepower"         "RPM"                "Rev.per.mile"      
[16] "Man.trans.avail"    "Fuel.tank.capacity" "Passengers"         "Length"             "Wheelbase"         
[21] "Width"              "Turn.circle"        "Rear.seat.room"     "Luggage.room"       "Weight"            
[26] "Origin"             "Make"              
> 

>
> Cars93 데이터 프레임의 1~5번째 변수만 선택한 후 names()로 변수명 변경 > Cars93_subset <- Cars93[,c(1:5)] > names(Cars93_subset) [1] "Manufacturer" "Model" "Type" "Min.Price" "Price" >

 

 


> names(Cars93_subset) <- c("V1", "V2", "V3", "V4", "V5")
> names(Cars93_subset)
[1] "V1" "V2" "V3" "V4" "V5"
 

 

 

 

(2-1) 데이터 프레임 변수명 변경 : reshape 패키지의 rename() 함수

 

다음으로 reshape 패키지에 들어있는 rename() 함수에 대해서 알아보겠습니다.  reshape 패키지는 install.packages("reshape") 으로 새로 설치 후에 library(reshape)로 호출해서 사용해야 합니다.

 

> # rename() 
> install.packages("reshape")
> library(reshape)
> 
> Cars93_subset <- rename(Cars93_subset, 
+                         c(V1 = "V1_Manufacturer", 
+                           V2 = "V2_Model", 
+                           V3 = "V3_Type", 
+                           V4 = "V4_Min.Price", 
+                           V5 = "V5_Price"))
 

 

 

 

(2-2) 데이터 프레임 변수명 변경 : plyr 패키지의 rename() 함수

 

데이터 전처리에 plyr 패키지도 많이 사용되는데요, 변수명 변경에 rename() 함수명은 똑같구요, 다만 변경하고자 하는 old 변수명에도 큰따옴표 ""를 사용한다는 것이 위의 reshape패키지의 rename()함수와 다른 점이 되겠습니다.

 

> install.packages("plyr")
> library(plyr)
> Cars93_subset <- rename(Cars93_subset, 
+                         c("V1_Manufacturer" = "Manufacturer", 
+                           "V2_Model" = "Model", 
+                           "V3_Type" = "Type", 
+                           "V4_Min.Price" = "Min.Price", 
+                           "V5_Price" = "Price"))
> View(Cars93_subset)
 

 

 

 

 

 

(2-3) 데이터 프레임의 변수명 변경 : dplyr 패키지의 rename() 함수

 

데이터 프레임의 데이터 전처리에 막강한 기능을 제공하는 dplyr 패키지에도 변수명 변경을 위한 rename() 함수를 제공합니다.  dplyr 패키지는 plyr 패키지와 친척 관계이지만 rename() 함수의 문법은 차이가 많습니다. 헷갈리지 않도록 조심하시기 바랍니다.

 

위이 plyr 패키지의 rename() 함수와 비교해서 dplyr 패키지의 rename() 함수의 차이점을 정리해보자면,

 

  - 새로운 변수명(new_var)이 앞에 나오고, 이전 변수명(old_var)이 뒤에 나옵니다

  - 큰 따옴표("") 안씁니다.

  - 바꾸고자 하는 변수가 여러개 있을 때 c() 로 안묶어주며, ","(comma)로 나열해줍니다.

 

# dplyr package, rename(dataframe, new_var1 = old_var1, new_var2 = old_var2, ...)
install.packages("dplyr")
library(dplyr) 

 

> Cars93_2 <- Cars93[ ,c(1:3)]
> names(Cars93_2)
[1] "Manufacturer" "Model"        "Type"
> Cars93_3 <- rename(Cars93_2, 
+                    New_Manufacturer = Manufacturer,
+                    New_Model = Model, 
+                    New_Type = Type)
> 
> names(Cars93_3)
[1] "New_Manufacturer" "New_Model"        "New_Type"

 

 

 

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

 

728x90
반응형
Posted by Rfriend
,

 

R 데이터 객체를 신규로 생성했거나, 외부에서 불러왔거나, 아니면 R 패키지에 내장되어 있는 데이터 셋을 활용한다고 했을 때 데이터 객체의 현황, 특성에 대해서 파악하는 것이 필요합니다.

 

이에 유용한 함수들을 알아보도록 하겠습니다.

 

 

 R 데이터 객체 탐색을 위한 함수 

 

R에 기본으로 내장되어 있는 'mtcars' 라는 데이터 프레임을 가지고 아래의 각 함수들의 예시를 들어보겠습니다.

'mtcars' 데이터는 1974 Motor Trend US magazine에서 자동차 디자인과 성능에 관해 추출한 11개의 변수로 구성된 데이터 프레임입니다.

 

> mtcars
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2 

 

'mrcars' 라고 콘솔창에 치면 위의 박스 상자에 있는 것처럼 데이터 보기가 가능합니다. 이처럼 데이터 관찰치와 변수가 몇 개 안되면 콘솔창이나 아니면 environment 창에서 데이터셋을 눌러서 미리보기를 할 수 있겠읍니다만, 데이터 관찰치가 몇 백만이 되고 변수도 수천개가 넘는 데이터 객체라면 무리겠지요. 그래서 아래 함수들이 필요합니다.

 

 

(1) str(객체) : 데이터 구조, 변수 개수, 변수 명, 관찰치 개수, 관찰치의 미리보기

 

> str(mtcars)
'data.frame':	32 obs. of  11 variables:
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
 $ disp: num  160 160 108 258 360 ...
 $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num  16.5 17 18.6 19.4 17 ...
 $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
 $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
 $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
 $ carb: num  4 4 1 1 2 1 4 2 2 4 ... 

 

mtcars 가 '32개의 관측치', '11개의 변수'로 되어있는 '데이터 프레임'이고, 각 변수명과 변수들의 유형, 그리고 상위 10개의 관측치가 미리보기 형식으로 제시됩니다. 데이터 셋 탐색을 위해 제일 처음 해보면 좋을 유용한 함수입니다.

 

 

(2) head(), tail() : 상위 6개, 하위 6개 관측치 미리보기

 

> head(mtcars)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1


>
tail(mtcars) mpg cyl disp hp drat wt qsec vs am gear carb Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.7 0 1 5 2 Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.9 1 1 5 2 Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.5 0 1 5 4 Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.5 0 1 5 6 Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.6 0 1 5 8 Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.6 1 1 4 2 

 

관측치가 수백만, 수천만 건인 경우는 상위 혹은 하위 몇개만 미리보기를 할 수 있으면 유용하겠지요.

 

 

(3) dim() : 데이터 객체의 차원

 

> dim(mtcars)
[1] 32 11 

 

str() 함수로 파악이 전부 가능한 정보인데요, 데이터 객체의 차원만 알고 싶거나 아니면 데이터 객체의 차원을 벡터로 해서 indexing해서 쓸일이 있을 때 이 함수를 사용하면 되겠지요.

 

 

(4) length() : 데이터 객체의 요소들의 개수

 

> length(mtcars) [1] 11

 

> length(mtcars$mpg)
[1] 32

 

첫번째 length(mtcars) 는 mtcars 데이터셋의 변수들의 개수를,

두번째 lenght(mtcars$mpg)는 mtcars의 데이터셋의 mpg라는 변수의 관측치의 개수를 나타냅니다.

(length()를 벡터에 사용하면 관측치의 개수를 나타냄)

목적에 맞게 골라서 사용하면 되겠습니다.

 

 

(5) names() : 데이터 객체 구성요소 이름

 

> names(mtcars)
 [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"

 

데이터 객체의 변수명을 알고 싶고, indexing해서 사용하고 싶으면 names() 함수를 사용하면 되겠습니다.

 

 

(6) class() : 데이터 객체 구성요소의 속성

 

> class(mtcars)
[1] "data.frame"
> sapply(mtcars, class)
      mpg       cyl      disp        hp      drat        wt      qsec        vs        am 
"numeric" "numeric" "numeric" "numeric" "numeric" "numeric" "numeric" "numeric" "numeric" 
     gear      carb 
"numeric" "numeric" 

 

첫번째의 class(mtcars)는 데이터 객체가 '데이터 프레임'임을 나타내고 있으며,

두번째 sapply(mtcars, class)는 'mtcars'라는 데이터 프레임의 모든 변수에다가 'class()라는 함수를 적용해라(sapply)고 했을 때의 결과로서, 11개의 각 변수별로 속성을 나타내고 있습니다.

(참고로, sapply()는 동일한 함수를 모두 적용하라는 함수입니다. 여기서는 class()라는 함수를 mtcars 내의 모든 변수에 공통으로 적용하라는 뜻입니다)

이 또한 목적에 맞게 골라서 사용하면 되겠습니다.

 

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

 

728x90
반응형
Posted by Rfriend
,