R

dplyr 패키지(select, distinct, arrange, group_by, filter, summarise, mutate)

jun_code 2021. 7. 26. 10:08

dplyr 패키지는 데이터 프레임에 적합한 패키지이다. 비정형 데이터의 요약과 정제 작업에 용이한데 다양한 함수들이 있다. 이 가운데 distinct, select, filter, group_by, summarise, aggregate, arrangemutate 함수에 대해 알아보도록 하겠다.

 


 

1. distinct() 함수

distinct() 함수는 데이터 셋에서 중복된 행을 제거하는데 사용되는 함수이다. 두 가지 예시를 보여줄 것인데, distinct()안에 들어간 매개변수에 따라 다르다. distinct(데이터셋)의 경우 데이터셋의 모든 항목에 대해 중복 체크를 수행하고 행 전체 값이 동일하면 제거를 수행한다. 다음으로, distinct(데이터셋, 중복체크열, 옵션)으로 매개변수가 들어간 경우 특정 열에 대한 중복 체크를 수행하게 되는데 특정 열의 값에 대해 중복이면 제거하게 된다.

 

df <- read.csv("rdatamachine_aasample.csv", header =T)
head(df, 5) 
'''
  Index      State   Y2002   Y2003   Y2004   Y2005   Y2006   Y2007   Y2008   Y2009   Y2010   Y2011   Y2012   Y2013
1     A    Alabama 1296530 1317711 1118631 1492583 1107408 1440134 1945229 1944173 1237582 1440756 1186741 1852841
2     A     Alaska 1170302 1960378 1818085 1447852 1861639 1465841 1551826 1436541 1629616 1230866 1512804 1985302
3     A    Arizona 1742027 1968140 1377583 1782199 1102568 1109382 1752886 1554330 1300521 1130709 1907284 1363279
4     A   Arkansas 1485531 1994927 1119299 1947979 1669191 1801213 1188104 1628980 1669295 1928238 1216675 1591896
5     C California 1685349 1675807 1889570 1480280 1735069 1812546 1487315 1663809 1624509 1639670 1921845      NA
    Y2014   Y2015
1 1558906 1916661
2 1580394 1979143
3 1525866 1647724
4 1360959 1329341
5 1388461 1644607  '''
sample_n(df, 5) # 임의로 5개를 골라 보여줌
'''
1     A    Arkansas 1485531 1994927 1119299 1947979 1669191 1801213 1188104 1628980 1669295 1928238 1216675 1591896
2     M    Missouri 1221316 1858368 1773451 1573967 1374863 1486197 1735099 1800620 1164202 1425363 1800052 1698105
3     I        Iowa 1499269 1444576 1576367 1388924 1554813 1452911 1317983 1150783 1751389 1992996 1501879 1173694
4     C Connecticut 1610512 1232844 1181949 1518933 1841266 1976976 1764457 1972730 1968730 1945524 1228529 1582249
5     M   Minnesota 1729921 1675204 1903907 1561839 1985692 1148621 1328133 1890633 1995304 1575533 1910216 1972021
    Y2014   Y2015
1 1360959 1329341
2 1767835 1996005
3 1431705 1641866
4 1503156 1718072
5 1515366 1864553  '''

result1 <- distinct(df)
result1
'''
   Index                State   Y2002   Y2003   Y2004   Y2005   Y2006   Y2007   Y2008   Y2009   Y2010   Y2011   Y2012
1      A              Alabama 1296530 1317711 1118631 1492583 1107408 1440134 1945229 1944173 1237582 1440756 1186741
2      A               Alaska 1170302 1960378 1818085 1447852 1861639 1465841 1551826 1436541 1629616 1230866 1512804
3      A              Arizona 1742027 1968140 1377583 1782199 1102568 1109382 1752886 1554330 1300521 1130709 1907284
4      A             Arkansas 1485531 1994927 1119299 1947979 1669191 1801213 1188104 1628980 1669295 1928238 1216675
5      C           California 1685349 1675807 1889570 1480280 1735069 1812546 1487315 1663809 1624509 1639670 1921845
6      C             Colorado 1343824 1878473 1886149 1236697 1871471 1814218 1875146 1752387 1913275 1665877 1491604
7      C          Connecticut 1610512 1232844 1181949 1518933 1841266 1976976 1764457 1972730 1968730 1945524 1228529
8      D             Delaware 1330403 1268673 1706751 1403759 1441351 1300836 1762096 1553585 1370984 1318669 1984027
9      D District of Columbia 1111437 1993741 1374643 1827949 1803852 1595981 1193245 1739748 1707823 1353449 1979708
10     F              Florida 1964626 1468852 1419738 1362787 1339608 1278550 1756185 1818438 1198403 1497051 1131928
11     G              Georgia 1929009 1541565 1810773 1779091 1326846 1223770 1773090 1630325 1145473 1851245 1850111
12     H               Hawaii 1461570 1200280 1213993 1245931 1459383 1430465 1919423 1928416 1330509 1902816 1695126
13     I                Idaho 1353210 1438538 1739154 1541015 1122387 1772050 1335481 1748608 1436809 1456340 1643855
14     I             Illinois 1508356 1527440 1493029 1261353 1540274 1747614 1871645 1658551 1422021 1751422 1696729
15     I              Indiana 1776918 1734104 1269927 1204117 1848073 1129546 1139551 1883976 1999102 1559924 1905760
16     I                 Iowa 1499269 1444576 1576367 1388924 1554813 1452911 1317983 1150783 1751389 1992996 1501879
17     K               Kansas 1509054 1290700 1522230 1532094 1104256 1863278 1949478 1561528 1550433 1465812 1882929
18     K             Kentucky 1813878 1448846 1800760 1250524 1137913 1911227 1301848 1956681 1350895 1512894 1916616
19     L            Louisiana 1584734 1110625 1868456 1751920 1233709 1920301 1185085 1124853 1498662 1210385 1234234
20     M                Maine 1582720 1678622 1208496 1912040 1438549 1330014 1295877 1969163 1627262 1706080 1437088
21     M             Maryland 1579713 1404700 1849798 1397738 1310270 1789128 1112765 1967225 1486246 1872327 1175819
22     M        Massachusetts 1647582 1686259 1620601 1777250 1531641 1380529 1978904 1567651 1761048 1658538 1482203
23     M             Michigan 1295635 1149931 1601027 1340716 1729449 1567494 1990431 1575185 1267626 1274673 1709853
24     M            Minnesota 1729921 1675204 1903907 1561839 1985692 1148621 1328133 1890633 1995304 1575533 1910216
25     M          Mississippi 1983285 1292558 1631325 1943311 1354579 1731643 1428291 1568049 1383227 1629132 1988270
26     M             Missouri 1221316 1858368 1773451 1573967 1374863 1486197 1735099 1800620 1164202 1425363 1800052
     Y2013   Y2014   Y2015
1  1852841 1558906 1916661
2  1985302 1580394 1979143
3  1363279 1525866 1647724
4  1591896 1360959 1329341
5       NA 1388461 1644607
6  1178355 1383978 1330736
7  1582249 1503156 1718072
8  1671279      NA 1627508
9  1912654 1782169 1410183
10 1107448 1407784 1170389
11 1887157      NA 1725470
12 1517184 1948108 1150882
13 1312561 1713718 1757171
14 1915435 1645465 1583516
15 1129794 1988394 1467614
16 1173694 1431705 1641866
17 1410249 1930090 1385528
18 1878271 1722762 1913350
19 1287663 1908602 1403857
20 1318546 1116792 1529233
21 1314343 1979529 1569566
22 1731917 1669749 1963337
23 1815596 1965196 1646634
24 1972021 1515366 1864553
25 1907777 1649668 1991232
26 1698105 1767835 1996005  '''

result2 <- distinct(df, Index, .keep_all=T) # Index가 동일한 것은 하나로 묶기
result2
'''
   Index      State   Y2002   Y2003   Y2004   Y2005   Y2006   Y2007   Y2008   Y2009   Y2010   Y2011   Y2012   Y2013
1      A    Alabama 1296530 1317711 1118631 1492583 1107408 1440134 1945229 1944173 1237582 1440756 1186741 1852841
2      C California 1685349 1675807 1889570 1480280 1735069 1812546 1487315 1663809 1624509 1639670 1921845      NA
3      D   Delaware 1330403 1268673 1706751 1403759 1441351 1300836 1762096 1553585 1370984 1318669 1984027 1671279
4      F    Florida 1964626 1468852 1419738 1362787 1339608 1278550 1756185 1818438 1198403 1497051 1131928 1107448
5      G    Georgia 1929009 1541565 1810773 1779091 1326846 1223770 1773090 1630325 1145473 1851245 1850111 1887157
6      H     Hawaii 1461570 1200280 1213993 1245931 1459383 1430465 1919423 1928416 1330509 1902816 1695126 1517184
7      I      Idaho 1353210 1438538 1739154 1541015 1122387 1772050 1335481 1748608 1436809 1456340 1643855 1312561
8      K     Kansas 1509054 1290700 1522230 1532094 1104256 1863278 1949478 1561528 1550433 1465812 1882929 1410249
9      L  Louisiana 1584734 1110625 1868456 1751920 1233709 1920301 1185085 1124853 1498662 1210385 1234234 1287663
10     M      Maine 1582720 1678622 1208496 1912040 1438549 1330014 1295877 1969163 1627262 1706080 1437088 1318546
     Y2014   Y2015
1  1558906 1916661
2  1388461 1644607
3       NA 1627508
4  1407784 1170389
5       NA 1725470
6  1948108 1150882
7  1713718 1757171
8  1930090 1385528
9  1908602 1403857
10 1116792 1529233  '''

 

2. select() 함수

select() 함수는 데이터셋에서 특정 열을 추출하고자 하는 경우에 사용하는 함수이다. select(데이터셋, 추출할 열) 형태로 특정 열을 지정하여 추출하게 된다. 열 내에서 조건도 부여하여 조건에 부합한 열의 값도 추출할 수 있다.

 

result3 <- select(df, State, Y2013:Y2015) # State와 Y2013부터 Y2015열 추출
result3
'''
                  State   Y2013   Y2014   Y2015
1               Alabama 1852841 1558906 1916661
2                Alaska 1985302 1580394 1979143
3               Arizona 1363279 1525866 1647724
4              Arkansas 1591896 1360959 1329341
5            California      NA 1388461 1644607
6              Colorado 1178355 1383978 1330736
7           Connecticut 1582249 1503156 1718072
8              Delaware 1671279      NA 1627508
9  District of Columbia 1912654 1782169 1410183
10              Florida 1107448 1407784 1170389  
                         (중략)                    '''

result4_1 <- select(df, starts_with('Y')) # 컬럼명의 시작 글자가 Y인 열만 추출
result4_1
'''
     Y2002   Y2003   Y2004   Y2005   Y2006   Y2007   Y2008   Y2009   Y2010   Y2011   Y2012   Y2013   Y2014   Y2015
1  1296530 1317711 1118631 1492583 1107408 1440134 1945229 1944173 1237582 1440756 1186741 1852841 1558906 1916661
2  1170302 1960378 1818085 1447852 1861639 1465841 1551826 1436541 1629616 1230866 1512804 1985302 1580394 1979143
3  1742027 1968140 1377583 1782199 1102568 1109382 1752886 1554330 1300521 1130709 1907284 1363279 1525866 1647724
4  1485531 1994927 1119299 1947979 1669191 1801213 1188104 1628980 1669295 1928238 1216675 1591896 1360959 1329341
5  1685349 1675807 1889570 1480280 1735069 1812546 1487315 1663809 1624509 1639670 1921845      NA 1388461 1644607
6  1343824 1878473 1886149 1236697 1871471 1814218 1875146 1752387 1913275 1665877 1491604 1178355 1383978 1330736
7  1610512 1232844 1181949 1518933 1841266 1976976 1764457 1972730 1968730 1945524 1228529 1582249 1503156 1718072
                                     (중략)                                                                          '''    

result4_2 <- select(df, ends_with('1'))
result4_2
'''
     Y2011
1  1440756
2  1230866
3  1130709
4  1928238
5  1639670
6  1665877
7  1945524
8  1318669
9  1353449
10 1497051
11 1851245
12 1902816
(중략)      '''

result4_3 <- select(df, contains('3')) # 3을 포함하는 컬럼 (2003, 2013 컬럼을 추출)
result4_3
'''
     Y2003   Y2013
1  1317711 1852841
2  1960378 1985302
3  1968140 1363279
4  1994927 1591896
5  1675807      NA
6  1878473 1178355
7  1232844 1582249
8  1268673 1671279
9  1993741 1912654
10 1468852 1107448
11 1541565 1887157
12 1200280 1517184
13 1438538 1312561
14 1527440 1915435
15 1734104 1129794  
      (중략)        '''
      
result4_4 <- select(df, -contains('3')) # 3을 포함하지 않는 컬럼 추출
result4_4
'''
   Index                State   Y2002   Y2004   Y2005   Y2006   Y2007   Y2008   Y2009   Y2010   Y2011   Y2012   Y2014
1      A              Alabama 1296530 1118631 1492583 1107408 1440134 1945229 1944173 1237582 1440756 1186741 1558906
2      A               Alaska 1170302 1818085 1447852 1861639 1465841 1551826 1436541 1629616 1230866 1512804 1580394
3      A              Arizona 1742027 1377583 1782199 1102568 1109382 1752886 1554330 1300521 1130709 1907284 1525866
4      A             Arkansas 1485531 1119299 1947979 1669191 1801213 1188104 1628980 1669295 1928238 1216675 1360959
5      C           California 1685349 1889570 1480280 1735069 1812546 1487315 1663809 1624509 1639670 1921845 1388461
6      C             Colorado 1343824 1886149 1236697 1871471 1814218 1875146 1752387 1913275 1665877 1491604 1383978
7      C          Connecticut 1610512 1181949 1518933 1841266 1976976 1764457 1972730 1968730 1945524 1228529 1503156
8      D             Delaware 1330403 1706751 1403759 1441351 1300836 1762096 1553585 1370984 1318669 1984027      NA
9      D District of Columbia 1111437 1374643 1827949 1803852 1595981 1193245 1739748 1707823 1353449 1979708 1782169
10     F              Florida 1964626 1419738 1362787 1339608 1278550 1756185 1818438 1198403 1497051 1131928 1407784
11     G              Georgia 1929009 1810773 1779091 1326846 1223770 1773090 1630325 1145473 1851245 1850111      NA
12     H               Hawaii 1461570 1213993 1245931 1459383 1430465 1919423 1928416 1330509 1902816 1695126 1948108
     Y2015
1  1916661
2  1979143
3  1647724
4  1329341
5  1644607
6  1330736
7  1718072
8  1627508
9  1410183
10 1170389
11 1725470
12 1150882
  (중략)    '''

 

3. summarise() 함수 / aggregate() 함수

두 함수 모두 데이터셋으로부터 데이터를 요약/집계하는 함수이다. 먼저, aggregate() 함수에 대해 살펴보도록 하겠다.

data <- read.csv("accdata2.csv", header = T)

aggregate(사상자수~발생년, data, sum) # 발생년도별 사상자수의 합계
'''
  발생년 사상자수
1   2012     8665
2   2013     8068
3   2014     7222  '''

data1 <- aggregate(사상자수~발생년+요일, data, sum) # 발생년도별 요일별 사상자수의 합계
data1
'''
   발생년 요일 사상자수
1    2012   금     1341
2    2013   금     1064
3    2014   금     1093
4    2012   목     1231
5    2013   목     1122
6    2014   목     1026
7    2012   수     1096
8    2013   수     1114
9    2014   수     1053
10   2012   월     1199
11   2013   월     1188
12   2014   월     1052
13   2012   일     1153
14   2013   일     1131
15   2014   일      946
16   2012   토     1386
17   2013   토     1210
18   2014   토     1079
19   2012   화     1259
20   2013   화     1239
21   2014   화      973  '''

filter(data1, 사상자수>1200)
'''
  발생년 요일 사상자수
1   2012   금     1341
2   2012   목     1231
3   2012   토     1386
4   2013   토     1210
5   2012   화     1259
6   2013   화     1239  '''

 다음으로, summarise() 함수에 대해 살펴보겠다. 단순 하나의 열 추출이 아닌 여러 열 추출을 위해 사용하는 함수가 있는데 이는 summarise_at() 함수이다. 이 함수에서 추출하고자 하는 여러 열을 선택하는 함수는 vars() 함수이다. 여러 열을 추출하고 각 열에서 하나의 값이 아닌 여러 값에 대해 살펴보고 싶은 경우도 있을 것이다. 그런 경우 funs() 함수로 여러 함수로 요약 집계를 수행할 수 있다.

 

summarise(df, 평균치2002 = mean(Y2002))
'''
  평균치2002
1    1546797  '''

summarise_at(df, vars(Y2011:Y2015), funs(mean, sd))
'''
  Y2011_mean Y2012_mean Y2013_mean Y2014_mean Y2015_mean Y2011_sd Y2012_sd Y2013_sd Y2014_sd Y2015_sd
1    1576780    1630457         NA         NA    1629391 245753.3 295242.4       NA       NA 250698.1
'''

summarise_at(df, vars(Y2011:Y2015), funs(mean, sd), na.rm=T) # 복수의 열에 대해 여러 함수로 요약집계
'''
  Y2011_mean Y2012_mean Y2013_mean Y2014_mean Y2015_mean Y2011_sd Y2012_sd Y2013_sd Y2014_sd Y2015_sd
1    1576780    1630457    1580625    1643527    1629391 245753.3 295242.4 298283.8 235754.5 250698.1
'''

summarise(df, avg_2014 = mean(Y2014, na.rm = T))
'''
  avg_2014
1  1643527  '''

 

4. arrange() 함수

arrange() 함수는 데이터 정렬 함수이다. 데이터 셋을 지정하고 정렬할 대상 열을 지정하여 데이터를 정렬할 수 있다. 정렬시, 오름차순으로 할지 내림차순으로 할지 잘 살펴보고 결정해 주어야 한다.

 

arrange(df, Index, desc(Y2002)) 
# Index열을 기준으로 오름차순으로 정렬하고 Index가 같은 경우 Y2002열을 내림차순으로 정렬한다.

'''
   Index                State   Y2002   Y2003   Y2004   Y2005   Y2006   Y2007   Y2008   Y2009   Y2010   Y2011   Y2012
1      A              Arizona 1742027 1968140 1377583 1782199 1102568 1109382 1752886 1554330 1300521 1130709 1907284
2      A             Arkansas 1485531 1994927 1119299 1947979 1669191 1801213 1188104 1628980 1669295 1928238 1216675
3      A              Alabama 1296530 1317711 1118631 1492583 1107408 1440134 1945229 1944173 1237582 1440756 1186741
4      A               Alaska 1170302 1960378 1818085 1447852 1861639 1465841 1551826 1436541 1629616 1230866 1512804
5      C           California 1685349 1675807 1889570 1480280 1735069 1812546 1487315 1663809 1624509 1639670 1921845
     Y2013   Y2014   Y2015
1  1363279 1525866 1647724
2  1591896 1360959 1329341
3  1852841 1558906 1916661
4  1985302 1580394 1979143
5       NA 1388461 1644607
       (중략)               '''

 

 

5. group_by() 함수

많은 데이터를 특정 열의 값을 기준으로 살펴보고 싶은 경우가 있을 것이다. 이 경우 group_by() 함수를 통해 특정 열 중심으로 데이터를 그룹화할 수 있다. 데이터셋을 지정하고 그룹화할 대상 열을 선택해 주면 된다.

group_by(df, Index)
'''
  Index State        Y2002   Y2003   Y2004  Y2005  Y2006  Y2007  Y2008  Y2009  Y2010  Y2011  Y2012   Y2013   Y2014  Y2015
   <chr> <chr>        <int>   <int>   <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>   <int>   <int>  <int>
 1 A     Alabama    1296530 1317711 1118631 1.49e6 1.11e6 1.44e6 1.95e6 1.94e6 1.24e6 1.44e6 1.19e6 1852841 1558906 1.92e6
 2 A     Alaska     1170302 1960378 1818085 1.45e6 1.86e6 1.47e6 1.55e6 1.44e6 1.63e6 1.23e6 1.51e6 1985302 1580394 1.98e6
 3 A     Arizona    1742027 1968140 1377583 1.78e6 1.10e6 1.11e6 1.75e6 1.55e6 1.30e6 1.13e6 1.91e6 1363279 1525866 1.65e6
 (중략)
 '''

다음으로, group_by() 함수와 같이 사용되는 chain operation에 대해 살펴보도록 하겠다. 다양한 연산을 한번에 하고 한눈에 보기 쉽게 나타내기 위해 chain operation의 %>% 파이프 연산자를 이용하는데 아래 예시를 통해 알아보도록 하겠다. 다음 코드는 df를 대상으로 Index별로 그룹화한 후 Y2015 컬럼의 값의 평균을 계산하여 보여주는 코드와 Y2014, Y2015컬럼을 추출하여 각 컬럼의 값의 평균과 표준편차를 계산하여 보여주는 코드이다.

 

a <- df %>% group_by(Index) %>% summarise(avg=mean(Y2015, na.rm=T)) # 그룹화, 열 추출, 각 열에서 요약을 한번에
a
'''
# A tibble: 10 x 2
   Index      avg
   <chr>    <dbl>
 1 A     1718217.
 2 C     1564472.
 3 D     1518846.
 4 F     1170389 
 5 G     1725470 
 6 H     1150882 
 7 I     1612542.
 8 K     1649439 
 9 L     1403857 
10 M     1794366.  '''

b <- df %>% group_by(Index) %>% select(Y2014:Y2015) %>% summarise_at(vars(Y2014:Y2015), mean, na.rm=T)
b
'''
# A tibble: 10 x 3
   Index    Y2014    Y2015
   <chr>    <dbl>    <dbl>
 1 A     1506531. 1718217.
 2 C     1425198. 1564472.
 3 D     1782169  1518846.
 4 F     1407784  1170389 
 5 G         NaN  1725470 
 6 H     1948108  1150882 
 7 I     1694820. 1612542.
 8 K     1826426  1649439 
 9 L     1908602  1403857 
10 M     1666305  1794366.  '''

c <- df %>% group_by(Index) %>% select(Y2014:Y2015) %>% summarise_at(vars(Y2014:Y2015), funs(mean, sd), na.rm=T)
c
'''
# A tibble: 10 x 5
   Index Y2014_mean Y2015_mean Y2014_sd Y2015_sd
   <chr>      <dbl>      <dbl>    <dbl>    <dbl>
 1 A       1506531.   1718217.   99606.  296455.
 2 C       1425198.   1564472.   67551.  205727.
 3 D       1782169    1518846.      NA   153672.
 4 F       1407784    1170389       NA       NA 
 5 G           NaN    1725470       NA       NA 
 6 H       1948108    1150882       NA       NA 
 7 I       1694820.   1612542.  229643.  120588.
 8 K       1826426    1649439   146603.  373227.
 9 L       1908602    1403857       NA       NA 
10 M       1666305    1794366.  295181.  206376.  '''

 

 

6. mutate() 함수

데이터를 처리하다보면 새로운 변수를 생성해야되는 경우가 발생한다. 이 경우 mutate() 함수mutate_at() 함수를 통해 새로운 변수를 생성하고 데이터셋의 마지막 컬럼에 추가하는 작업을 수행한다.

 

a1 <- mutate(df, differ = Y2015-Y2014)
head(a1)
'''
  Index      State   Y2002   Y2003   Y2004   Y2005   Y2006   Y2007   Y2008   Y2009   Y2010   Y2011   Y2012   Y2013
1     A    Alabama 1296530 1317711 1118631 1492583 1107408 1440134 1945229 1944173 1237582 1440756 1186741 1852841
2     A     Alaska 1170302 1960378 1818085 1447852 1861639 1465841 1551826 1436541 1629616 1230866 1512804 1985302
3     A    Arizona 1742027 1968140 1377583 1782199 1102568 1109382 1752886 1554330 1300521 1130709 1907284 1363279
4     A   Arkansas 1485531 1994927 1119299 1947979 1669191 1801213 1188104 1628980 1669295 1928238 1216675 1591896
5     C California 1685349 1675807 1889570 1480280 1735069 1812546 1487315 1663809 1624509 1639670 1921845      NA
6     C   Colorado 1343824 1878473 1886149 1236697 1871471 1814218 1875146 1752387 1913275 1665877 1491604 1178355
    Y2014   Y2015 differ
1 1558906 1916661 357755
2 1580394 1979143 398749
3 1525866 1647724 121858
4 1360959 1329341 -31618
5 1388461 1644607 256146
6 1383978 1330736 -53242  '''

a2 <- filter(a1, differ>300000)
head(a2)
'''
  Index       State   Y2002   Y2003   Y2004   Y2005   Y2006   Y2007   Y2008   Y2009   Y2010   Y2011   Y2012   Y2013
1     A     Alabama 1296530 1317711 1118631 1492583 1107408 1440134 1945229 1944173 1237582 1440756 1186741 1852841
2     A      Alaska 1170302 1960378 1818085 1447852 1861639 1465841 1551826 1436541 1629616 1230866 1512804 1985302
3     M       Maine 1582720 1678622 1208496 1912040 1438549 1330014 1295877 1969163 1627262 1706080 1437088 1318546
4     M   Minnesota 1729921 1675204 1903907 1561839 1985692 1148621 1328133 1890633 1995304 1575533 1910216 1972021
5     M Mississippi 1983285 1292558 1631325 1943311 1354579 1731643 1428291 1568049 1383227 1629132 1988270 1907777
    Y2014   Y2015 differ
1 1558906 1916661 357755
2 1580394 1979143 398749
3 1116792 1529233 412441
4 1515366 1864553 349187
5 1649668 1991232 341564  '''

a3 <- mutate(df, rank=dense_rank(desc(Y2015))) # 큰 값이 1이 되도록 ranking
head(a3)
'''
  Index      State   Y2002   Y2003   Y2004   Y2005   Y2006   Y2007   Y2008   Y2009   Y2010   Y2011   Y2012   Y2013
1     A    Alabama 1296530 1317711 1118631 1492583 1107408 1440134 1945229 1944173 1237582 1440756 1186741 1852841
2     A     Alaska 1170302 1960378 1818085 1447852 1861639 1465841 1551826 1436541 1629616 1230866 1512804 1985302
3     A    Arizona 1742027 1968140 1377583 1782199 1102568 1109382 1752886 1554330 1300521 1130709 1907284 1363279
4     A   Arkansas 1485531 1994927 1119299 1947979 1669191 1801213 1188104 1628980 1669295 1928238 1216675 1591896
5     C California 1685349 1675807 1889570 1480280 1735069 1812546 1487315 1663809 1624509 1639670 1921845      NA
6     C   Colorado 1343824 1878473 1886149 1236697 1871471 1814218 1875146 1752387 1913275 1665877 1491604 1178355
    Y2014   Y2015 rank
1 1558906 1916661    5
2 1580394 1979143    3
3 1525866 1647724   11
4 1360959 1329341   24
5 1388461 1644607   13
6 1383978 1330736   23  '''

a4 <- mutate(df, rank = min_rank(desc(Y2015)))
head(a4)
'''
  Index      State   Y2002   Y2003   Y2004   Y2005   Y2006   Y2007   Y2008   Y2009   Y2010   Y2011   Y2012   Y2013
1     A    Alabama 1296530 1317711 1118631 1492583 1107408 1440134 1945229 1944173 1237582 1440756 1186741 1852841
2     A     Alaska 1170302 1960378 1818085 1447852 1861639 1465841 1551826 1436541 1629616 1230866 1512804 1985302
3     A    Arizona 1742027 1968140 1377583 1782199 1102568 1109382 1752886 1554330 1300521 1130709 1907284 1363279
4     A   Arkansas 1485531 1994927 1119299 1947979 1669191 1801213 1188104 1628980 1669295 1928238 1216675 1591896
5     C California 1685349 1675807 1889570 1480280 1735069 1812546 1487315 1663809 1624509 1639670 1921845      NA
6     C   Colorado 1343824 1878473 1886149 1236697 1871471 1814218 1875146 1752387 1913275 1665877 1491604 1178355
    Y2014   Y2015 rank
1 1558906 1916661    5
2 1580394 1979143    3
3 1525866 1647724   11
4 1360959 1329341   24
5 1388461 1644607   13
6 1383978 1330736   23  '''

a5 <- mutate_at(df, vars(Y2013:Y2015), funs(rank = min_rank(desc(.)))) 
# 세개 컬럼의 등수 비교, (.)으로 vars내 열 자동 기입
head(a5)
'''
  Index      State   Y2002   Y2003   Y2004   Y2005   Y2006   Y2007   Y2008   Y2009   Y2010   Y2011   Y2012   Y2013
1     A    Alabama 1296530 1317711 1118631 1492583 1107408 1440134 1945229 1944173 1237582 1440756 1186741 1852841
2     A     Alaska 1170302 1960378 1818085 1447852 1861639 1465841 1551826 1436541 1629616 1230866 1512804 1985302
3     A    Arizona 1742027 1968140 1377583 1782199 1102568 1109382 1752886 1554330 1300521 1130709 1907284 1363279
4     A   Arkansas 1485531 1994927 1119299 1947979 1669191 1801213 1188104 1628980 1669295 1928238 1216675 1591896
5     C California 1685349 1675807 1889570 1480280 1735069 1812546 1487315 1663809 1624509 1639670 1921845      NA
6     C   Colorado 1343824 1878473 1886149 1236697 1871471 1814218 1875146 1752387 1913275 1665877 1491604 1178355
    Y2014   Y2015 Y2013_rank Y2014_rank Y2015_rank
1 1558906 1916661          8         15          5
2 1580394 1979143          1         14          3
3 1525866 1647724         17         16         11
4 1360959 1329341         13         23         24
5 1388461 1644607         NA         21         13
6 1383978 1330736         22         22         23  '''