본문 바로가기
공부/R Programming

R 기초; 데이터프레임 인덱싱-3

by 혼밥맨 2021. 1. 10.
반응형

R 기초; 데이터프레임 인덱싱-3

 

# 자동차 모델 별 자동차 정보 데이터 불러오기

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

 

# subset이용해서 mpg가 30 초과인 모델만 추출하기

subset(mtcars, subset=(mpg > 30), select=mpg)

                mpg
Fiat 128       32.4
Honda Civic    30.4
Toyota Corolla 33.9
Lotus Europa   30.4

 

# subset이용해서 cly가 4이고, am이 0인 모델 추출하기

subset(mtcars, subset=(cyl == 4 & am == 0), select=c(mpg, hp, wt))

               mpg hp    wt
Merc 240D     24.4 62 3.190
Merc 230      22.8 95 3.150
Toyota Corona 21.5 97 2.465

 

# mpg가 평균 초과인 모델 추출하기

subset(mtcars, subset=(mpg > mean(mpg)), select=c(mpg, cyl, wt))

                mpg cyl    wt
Mazda RX4      21.0   6 2.620
Mazda RX4 Wag  21.0   6 2.875
Datsun 710     22.8   4 2.320
Hornet 4 Drive 21.4   6 3.215
Merc 240D      24.4   4 3.190
Merc 230       22.8   4 3.150
Fiat 128       32.4   4 2.200
Honda Civic    30.4   4 1.615
Toyota Corolla 33.9   4 1.835
Toyota Corona  21.5   4 2.465
Fiat X1-9      27.3   4 1.935
Porsche 914-2  26.0   4 2.140
Lotus Europa   30.4   4 1.513
Volvo 142E     21.4   4 2.780

 

# 미국 내 범죄율 데이터 불러오기

head(USArrests)

           Murder Assault UrbanPop Rape
Alabama      13.2     236       58 21.2
Alaska       10.0     263       48 44.5
Arizona       8.1     294       80 31.0
Arkansas      8.8     190       50 19.5
California    9.0     276       91 40.6
Colorado      7.9     204       78 38.7

 

# 데이터의 상관계수 알아보기 using cor()

cor(USArrests)

             Murder   Assault   UrbanPop      Rape
Murder   1.00000000 0.8018733 0.06957262 0.5635788
Assault  0.80187331 1.0000000 0.25887170 0.6652412
UrbanPop 0.06957262 0.2588717 1.00000000 0.4113412
Rape     0.56357883 0.6652412 0.41134124 1.0000000

 

# UrbanPop 열만 제외하고 데이터 출력하기

cor(subset(USArrests, select=-UrbanPop))

           Murder   Assault      Rape
Murder  1.0000000 0.8018733 0.5635788
Assault 0.8018733 1.0000000 0.6652412
Rape    0.5635788 0.6652412 1.0000000

 

 

cor(subset(USArrests, select=-c(UrbanPop, Rape)))

           Murder   Assault
Murder  1.0000000 0.8018733
Assault 0.8018733 1.0000000

 

# R에서 SQL 활용하기

# sqldf 설치하기

install.packages("sqldf")

library(sqldf)

data("mtcars")

 

# mpg가 30초과인 데이터 추출하는 SQL 문법

sqldf("select * from mtcars where mpg > 30", row.names=TRUE)

                mpg cyl disp  hp drat    wt  qsec vs am gear carb
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
Lotus Europa   30.4   4 95.1 113 3.77 1.513 16.90  1  1    5    2

 

 

# cyl가 6개인 모델들을 mpg 오름차순으로 정렬해서 추출하기

sqldf("select * from mtcars where cyl=6 order by mpg", row.names=TRUE)

                mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Merc 280C      17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Valiant        18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Merc 280       19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Ferrari Dino   19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
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
Hornet 4 Drive 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1

 

 

# cyl가 4 혹은 6인 데이터를 기어를 그룹으로 avg(mpg), avg(wt), gear 열들을 추출한다.

sqldf("select avg(mpg) as avg_mpg, avg(wt) as avg_wt, gear from mtcars where cyl in (4,6) group by gear", row.names=TRUE)

   avg_mpg   avg_wt gear
1 20.33333 3.046667    3
2 24.53333 2.616667    4
3 25.36667 2.141000    5

 

# 반복 없도록 Species을 출력한다

data(iris)

sqldf("select distinct Species from iris")

     Species
1     setosa
2 versicolor
3  virginica

 

# 세 개의 row만 출력

sqldf("select * from iris limit 3")

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species

1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa

 

 

# 종 (species)이 setosa인 데이터의 Sepal.Length의 평균을 추출

sqldf("select avg([Sepal.Length]) from iris where species='setosa' ")

    avg([Sepal.Length])

1               5.006

반응형

댓글