벡터 함수, max,min,sum,mean,median,cor,colSoms,rowSoms

   벡터 함수는 기초적으로 알아야 하는 함수이다.    모델을 돌리기 전,  데이터 탐색을 할 때, 벡터 함수를 미리 돌려 보고,  데이터가 맞는지 검증을 하게 된다.   물론 집계할 수 있는 colSomes, rowSums와 같은 함수도 있다.   이 것에 대한 내용을 알게 되면, 향후  dplyr 에서 summarise나  mutate 에서 자유로이 계산 할 수 있는 장점을 가지고 있다. 


3.8 벡터 함수

R의 큰 장점중 하나는 반복문과 첨자 없이 전체 벡터에 대한 함수를 연산할 수 있다는 접입니다. 주요 벡터 함수는 아래 표와 같습니다. 다음 숫자 벡터를 사용해 해당 함수를 실행해 보십시오.

y<-c(8,3,5,7,6,6,8,9,2,3,9,4,10,4,11)

일부 벡터 함수는 1개의 값 만을 출력 하기도 합니다.

mean(y)
## [1] 6.333333


R에서 사용되는 벡터 함수
연산 의미
max(x) x의 최대값
min(x) x의 최소값
sum(x) 모든 x값의 합
mean(x) x의 산술평균
median(x) x의 중위수
range(x) x의 최소값과 최대값의 차이
var(x) x의 표본분산
cor(x,y) 벡터 x와 y 와 상관관계
sort(x) x 값의 정렬
rank(x) x값을 순위 벡터
order(x) 오름차순으로 x를 정렬하는 순열을 포함한 정수 벡터
quantile(x) x 값의 사분위수를 나타내는 벡터
cumsum(x) 설정된 지점까지 모든 요소의 합을 포함하는 벡터
cumprod(x) 설정된 지점까지 모든 요소의 합을 포함하는 벡터
colMeans(x) 데이터 프레임 또는 행렬 x의 열 평균
colMeans(x) 데이터 프레임 또는 행렬 x의 열 평균
colSums(x) 데이터 프레임 또는 행렬 x의 열 합계
rowMeans(x) 데이터 프레임 또는 행렬 x의 행 평균
rowSums(x) 데이터 프레임 또는 행렬 x의 행 합

2 개의 값을 생성하는 벡터 함수도 있으며 예제의 실행 결과는 최소값 2와 최대값 11일 입니다.

range(y)
## [1]  2 11

R에서 가장 유용한 벡터 함수는 table 입니다. 이 함수가 얼마나 유용한지는 실제로 사용해봐야 압니다.

아래는 벡터 counts는 10,000개의 음이항 분포를 따르는 임의의 정수 입니다.
이 값을 10,000개의 잎에 남아 있는 곰팡이 병변의 수라고 가정 합니다.

counts <- rnbinom(10000, mu=0.92, size = 1.1)

counts 벡터의 첫 30개 값은 다음과 같습니다.

counts[1:30]
##  [1] 0 0 2 1 0 0 3 0 0 0 3 1 0 0 3 4 1 0 0 0 0 0 0 1 1 2 0 0 2 1

10,000 개의 숫자로 구성된 벡터에서 각 숫자는 몇 개인가? 이 작업은 상당한 연산이 필요하지만 R을 사용하면 쉽게 계산 할 수 있습니다.

table(counts)
## counts
##    0    1    2    3    4    5    6    7    8    9   10   12   18 
## 5163 2510 1246  587  262  131   48   24   19    4    4    1    1

0은 5천개 정도 있고 , 1은 2천 개 정도가 있습니다. 데이터를 돌리때 마다 숫자는 바뀝니다.


예제 1

아래는 각 도/연도별(2001~2020) 출생 인원을 예시로 나타낸 표입니다. 출생 년도별 총 인원을 구하시고, 시/도별 2001~2020년까지 총 출생 인원과 평균인원을 구하십시오.



시/도 연도별 출생 인원
행정구역 2001 2002 2003 2004 2005 2006
서울특별시 114,764 102,008 101,227 99,828 90,468 93,922
부산광역시 35,848 30,767 30,117 28,231 25,681 25,881
대구광역시 28,111 24,260 24,513 23,259 20,804 20,360
인천광역시 30,494 26,775 26,832 25,092 23,026 23,711
광주광역시 18,198 16,036 15,954 14,729 13,327 13,679
대전광역시 17,290 15,631 15,712 15,024 13,950 14,489
울산광역시 13,600 11,666 11,720 11,151 10,469 10,740
경기도 126,264 116,854 120,433 117,812 109,533 115,111
강원도 16,873 15,314 14,349 13,776 12,657 12,455
충청북도 17,322 15,329 14,650 14,331 13,164 13,366
충청남도 21,962 19,059 18,627 18,640 17,521 18,625
전라북도 22,192 19,215 18,437 17,257 15,745 15,571
전라남도 22,588 19,242 18,333 17,256 15,818 15,905
경상북도 30,500 26,022 25,447 23,553 22,339 22,567
경상남도 36,475 32,203 32,102 30,922 28,471 29,524
제주특별자치도 7,453 6,530 6,583 6,097 5,734 5,853


아래와 링크와 같이 데이터 셋을 받고,   데이터를 로딩 합니다. 

https://docs.google.com/spreadsheets/d/1UIwxoew8zfyOkrt_ldKZDzSkaK3WiPP2/edit?usp=sharing&ouid=104041508737066115162&rtpof=true&sd=true

library(readxl)
born <- read_excel("born.xlsx")
str(born)
## tibble [16 × 21] (S3: tbl_df/tbl/data.frame)
##  $ 행정구역: chr [1:16] "서울특별시" "부산광역시" "대구광역시" "인천광역시" ...
##  $ 2001    : num [1:16] 114764 35848 28111 30494 18198 ...
##  $ 2002    : num [1:16] 102008 30767 24260 26775 16036 ...
##  $ 2003    : num [1:16] 101227 30117 24513 26832 15954 ...
##  $ 2004    : num [1:16] 99828 28231 23259 25092 14729 ...
##  $ 2005    : num [1:16] 90468 25681 20804 23026 13327 ...
##  $ 2006    : num [1:16] 93922 25881 20360 23711 13679 ...
##  $ 2007    : num [1:16] 101249 28426 22295 26712 14810 ...
##  $ 2008    : num [1:16] 94736 26670 20562 25365 13890 ...
##  $ 2009    : num [1:16] 89594 25110 19399 24379 13101 ...
##  $ 2010    : num [1:16] 93266 27415 20557 25752 13979 ...
##  $ 2011    : num [1:16] 91526 27759 20758 26118 13916 ...
##  $ 2012    : num [1:16] 93914 28673 21472 27781 14392 ...
##  $ 2013    : num [1:16] 84066 25831 19340 25560 12729 ...
##  $ 2014    : num [1:16] 83711 26190 19361 25786 12729 ...
##  $ 2015    : num [1:16] 83005 26645 19438 25491 12441 ...
##  $ 2016    : num [1:16] 75536 24906 18298 23609 11580 ...
##  $ 2017    : num [1:16] 65389 21480 15946 20445 10120 ...
##  $ 2018    : num [1:16] 58074 19152 14400 20087 9105 ...
##  $ 2019    : num [1:16] 53673 17049 13233 18522 8364 ...
##  $ 2020    : num [1:16] 47445 15058 11193 16040 7318 ...

데이터 셋을 보면 1번 컬럼은 character Type이고, 나머지는 numbering 타입입니다.
따라서 데이터를 데이터를 계산 할때는 1번 컬럼을 빼고 계산 해야 합니다. 빼는 방법은 대괄호 치고 원하는 컬럼 번호를 선택 born[2:21]하는 것입니다.

# 데이터 매트릭스로 바꾸어서 계산   
  temp <- data.frame(t(data.matrix(c("합계", colSums(born[2:21])))))

# rbind를 하기 위한 데이터 대치 
  colnames(temp) <-  colnames(born)

# rbind를 총합 한 데이터 추가   
  born <- rbind(born,temp)

데이터 계산을 할때, data.matrix에 첫번째 컬럼을 character로 넣고, 나머지는 컬럼을 계산 합니다. 그리고, 데이터가 세로로 만들어 지기 때문에, 이것을 가로로 만들어야 합니다. 이것을 계산할때 전치행렬 t(transpose)를 해야 합니다.data.matrix를 계산하고나면 컬럼 이름이 원래 이름과 다르기 때문에, born 데이터 프레임의 이름을 가져와서, data.matrix로 바꾼 것에다 다시 컬럼 명을 넣어 주어야 합니다.

데이터 계산이 끝나면, 계산한 데이터가 charater로 바뀌었기 때문에, 데이터 타입을 integer로 바꾸어야 합니다.

library(dplyr)
# 데이터 타입을 바꾸기   
  born <- born %>%  mutate_at(c(2:21), as.integer)

데이터 타입을 바꾸고 나면 rowSums() 열을 계산합니다. 열은 dplyr 패키지로 아주 간단하게 계산이 됩니다.

# 지역별 출산 합계
  born <-  born %>% 
    mutate(출산합계 = rowSums(born[2:21]))
  
# 지역별 출산 평균  
  born <- born %>% 
    mutate(출산평균 = rowMeans(born[2:21]))
  
  head(born)
## # A tibble: 6 × 23
##   행정구역 `2001` `2002` `2003` `2004` `2005` `2006` `2007` `2008` `2009` `2010`
##   <chr>     <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>
## 1 서울특…  114764 102008 101227  99828  90468  93922 101249  94736  89594  93266
## 2 부산광…   35848  30767  30117  28231  25681  25881  28426  26670  25110  27415
## 3 대구광…   28111  24260  24513  23259  20804  20360  22295  20562  19399  20557
## 4 인천광…   30494  26775  26832  25092  23026  23711  26712  25365  24379  25752
## 5 광주광…   18198  16036  15954  14729  13327  13679  14810  13890  13101  13979
## 6 대전광…   17290  15631  15712  15024  13950  14489  15780  14856  13915  14314
## # … with 12 more variables: `2011` <int>, `2012` <int>, `2013` <int>,
## #   `2014` <int>, `2015` <int>, `2016` <int>, `2017` <int>, `2018` <int>,
## #   `2019` <int>, `2020` <int>, 출산합계 <dbl>, 출산평균 <dbl>

댓글 없음:

댓글 쓰기

css cheat sheet 클래스 선택자, margin(마진), display , center 조정 간단한 구성 요소

 앞에서는 html의 간단한 sheet를 소개 하였습니다.   html은  주로 골격을 나타나는 것이라, 디자인을 하는데는 css로 하여야 합니다.  아래 코드와 같이 css 관련 하여 매우 간단하게 코딩 하겠습니다.  body 부분의 css 코딩  ...