setwd('c:/users/is2js/R_da/')

#### 기술 통계량 ####

# 숫자 생성해보기

number = c(1:1000) # c()은 안붙혀도 상관없음 연속이라...
number = 1:1000

# 시드 -> sample(data, n) : 데이터 내에서 n개의 난수 생성
# ****블록지정 set.seed()와 sample(data,n)을 같이 해서 실행해야 난수의 재현성 유지*****
set.seed(50) # 재현성을 위해난수여도 시드 만들어주기
number = sample(number, 30) # 30개 뽑기

# 정렬하기 :
# 1. order(변수)는 원래 숫자 자리에 order만 나타내줌
# 2. 변수[ order(변수) ] 해주면, 오름차순으로 정렬됨.

number[order(number)]
number[order(-number)] # 안의 변수에 -를 붙혀주면 역순으로 나온다.
number = number[order(number)]
number

# 최소값, 최대값, 평균
min(number)
max(number)
mean(number)

#### 중앙값 ####
# 1. 숫자가 홀수개인 경우 - 가운데 위치한 수
# 2. 숫자가 짝수개인 경우 - 가운데 2수의 평균
median(number)

length(number) # 30개
number[15] # 30/2     = 15
number[16] #30/2 + 1  = 16

#### 최빈값 ####
# 주어진 숫자중에 가장 빈번하게 나타나는 값
# R의 기본함수 중에는 사용자정의 함수를 정의해서 사용해야한다.
# 사용자 정의함수여야 가장 속도가 빠르다.

mode = function(x){
   ux = unique(x)
   ux[which.max(tabulate(match(x,ux)))]
}
mode(c(1, 2, 1, 1, 2, 3))
mode(number)

# table에 씌워서, dataframe처럼 해주면, 빈도수가 출력되기도 한다.
# 그러나 속도가 많이 느려진다.
as.data.frame(table(c(1, 2, 1, 1, 2, 3)))


# 분산(Variance)과 표준편차(Standard deviation )
# 분산 : 평균과의 차이= 편차   를 제곱한 뒤, 개수로 나눈 것
# 표준편차 : 분산에 루트를 씌워 데이터가 어느정도 분포하고 있는지 보는 것

var(c(1, 3, 5, 2, 7, 10))
sd(c(1, 3, 5, 2, 7, 10))


#### 기술 통계량(결측 처리) ####
# 결측치를 포함한 평균 계산 - mean()함수에 인자로 na.rm = TRUE 인자를 넣어준다.!
mean(c(1:3, NA, 23)) # 기본적으로 mean을 하면 NA로 출력된다!
mean(c(1:3, NA, 23), na.rm = TRUE) # NA와 갯수를 제외(NA를 romove)시키고 나머지로 평균 구함
mean(c(1:3, "사과", 23)) # 문자열을 포함한 경우, na.rm으로 안된다. 아예 빼고 계산해야한다.

image

+ Recent posts