1번
자동차 데이터 셋(mtcars)에서 qsec 컬럼 컬럼을 Min-Max Scale(최소-최대 정규화)로 변환 후 0.5보다 큰 값을 가지는 레코드(row) 수를 구하시오. (데이터셋 : mtcars)
📌 사용자 정의 함수
> min_max <- function(x) {
+ return((x - min(x)) / (max(x) - min(x)))
+ }
> result <- sum(min_max(mtcars$qsec) > 0.5)
> print(result)
[1] 9
📌caret 패키지의 preProcess()
> library(caret)
> minmax <- preProcess(mtcars, method = 'range')
> result <- sum(predict(minmax, mtcars)$qsec > 0.5)
> print(result)
[1] 9
2번
주어진 데이터에서 이상치(소수점 나이)를 찾고 올림, 내림, 버림(절사)했을때 3가지 모두 이상치 'age' 평균을 구한 다음 모두 더하여 출력하시오. (데이터셋 : basic1.csv)
> library(readr)
> basic <- read_csv("basic1.csv")
> outlier <- basic[(basic$age * 10) %% 10 != 0, ]
> mean_ceil <- mean(ceiling(outlier$age))
> mean_floor <- mean(floor(outlier$age))
> mean_trunc <- mean(trunc(outlier$age))
> result <- mean_ceil + mean_floor + mean_trunc
> print(result)
[1] 69.5
3번
결측치가 80%이상 되는 컬럼은(변수는) 삭제하고, 80% 미만인 결측치가 있는 컬럼은 'city'별 중앙값으로 값을 대체하고 'f1'컬럼의 평균값을 출력하세요. (데이터셋 : basic1.csv )
> colSums(is.na(basic) / nrow(basic))
id age city f1 f2 f3 f4 f5
0.00 0.00 0.00 0.31 0.00 0.95 0.00 0.00
> basic$f3 <- NULL
> basic$city <- as.factor(basic$city)
> levels(basic$city)
[1] "경기" "대구" "부산" "서울"
> city_med <- basic %>% group_by(city) %>% summarise(med = median(f1, na.rm=T))
> head(city_med)
city med
1 경기 58
2 대구 75
3 부산 62
4 서울 68
> basic$f1[is.na(basic$f1) == T & basic$city == '경기'] <- city_med$med[city_med == '경기']
> basic$f1[is.na(basic$f1) == T & basic$city == '대구'] <- city_med$med[city_med == '대구']
> basic$f1[is.na(basic$f1) == T & basic$city == '부산'] <- city_med$med[city_med == '부산']
> basic$f1[is.na(basic$f1) == T & basic$city == '서울'] <- city_med$med[city_med == '서울']
> result <- mean(basic$f1)
> print(result)
[1] 65.52
4번
주어진 데이터 중 'f1' 컬럼 결측 데이터를 제거하고, 'city'와 'f2'을 기준으로 묶어 합계를 구하고, 'city가 경기이면서 f2가 0'인 조건에 만족하는 f1 값을 구하시오. (데이터셋 : basic1.csv)
> basic <- read_csv('basic1.csv')
> colSums(is.na(basic))
id age city f1 f2 f3 f4 f5
0 0 0 31 0 95 0 0
> basic <- basic %>% filter(!is.na(f1))
> city_f2_sum <- basic %>% group_by(city, f2) %>% summarise(sum = sum(f1))
> resutl <- city_f2_sum %>% filter(city == '경기' & f2 == 0)
> print(result$sum)
[1] 833
5번
주어진 데이터 중 'f4'컬럼 값이 'ENFJ'와 'INFP'인 'f1'의 표준편차 차이를 절대값으로 구하시오. (데이터셋 : basic1.csv)
> library(dplyr)
> enfj_sd <- basic %>% filter(f4 == 'ENFJ') %>% summarise(sd = sd(f1, na.rm=T))
> infp_sd <- basic %>% filter(f4 == 'INFP') %>% summarise(sd = sd(f1, na.rm=T))
> result <- abs(enfj_sd - infp_sd)
> print(result)
sd
1 5.859622